在 Node.js 18.17.0 和 MariaDB 10.4 中将 ID: buffer 转换为 UUID

问题描述 投票:0回答:1

我正在尝试从数据库检索一组电影,其 ID 为 UUID 格式。

我正在使用 Node.js 18.17.0 和 MariaDB 10.4(最新的 XAMPP 版本)。

我做了以下事情:

CREATE TABLE movie(
  id BINARY(36) PRIMARY KEY DEFAULT UUID(),
  title VARCHAR(255) NOT NULL,
  year INT NOT NULL,
  director VARCHAR(255) NOT NULL,
  duration INT NOT NULL,
  poster TEXT,
  rate DECIMAL(2, 1) UNSIGNED NOT NULL
);
import mariadb from 'mariadb'.

const config = {
  host: 'localhost',
  port: 3306,
  user: 'root',
  password: '',
  database: 'moviesdb'
}

const connection = await mariadb.createConnection(config)

export class MovieModel{
  static getAll = async ({genre}) => {
    const result = await connection.query('SELECT id FROM movie')
    console.log(result)
  }
}

这告诉我:

[
  {
    id: <Buffer 63 34 30 30 37 37 37 33 33 31 30 2d 62 31 34 34 66 2d 31 31 65 65 2d 39 64 31 36 2d 34 30 31 36 37 65 61 65 63 66 37 64>
  },
  ...
]

当我真正期待它向我展示时:

[
  {
    id: c4077310-b14f-11ee-9d16-40167eaecf7d
  },
  ...
]

有没有简单的方法可以解决这个问题?

node.js mariadb buffer uuid
1个回答
0
投票

没问题。 Binary 和 Varchar [在某种程度上]兼容。 UUID 只有 ASCII 字符。

显示十六进制的

BINARY
列:

id: <Buffer 63 34 30 30 37 37 37...

正如你所说,你正在期待角色:

id: c40777...

这会将调用

UUID()
的字符放入
BINARY
列中。

id BINARY(36) PRIMARY KEY DEFAULT UUID()

你也可以放入字符栏:

id CHAR(36) CHARACTER SET ascii PRIMARY KEY DEFAULT UUID()

在这种情况下,您会看到“c50777...”而不是等效的十六进制。

无论哪种情况,您的程序都应该工作相同。

这是我对 UUID 的讨论,以及如果您有数百万行带有 UUID

可以采取哪些措施来提高性能
© www.soinside.com 2019 - 2024. All rights reserved.