我工作的项目切换到了MySQL。我们使用的密钥是UUID字符串(如43d597d7-2323-325a-90fc-21fa5947b9f3),但数据库字段不是字符串,而是定义为二进制(16) - 16字节无符号二进制。
据我所知,UUID基本上是一个16字节的二进制文件,但我不知道如何从/转换成二进制数。
我使用node-mysql来访问数据库,我尝试使用node-uuid来解析UUID,但这会产生一个整数数组。我也尝试使用Node's Buffer,但这只会产生一个缓冲区对象。
如何将UUID字符串转换为适合该字段?如何将我从该字段读取的值转换为UUID?
答案 0 :(得分:3)
由于时间不够,我会粘贴提供有效结果的评论并稍后修改答案,以便更清楚。
是的,如果您的JS应用程序中已经存在该字符串格式的UUID 43d597d7-2323-325a-90fc-21fa5947b9f3
,则您将以下查询发送给MySQL:
SELECT col FROM table WHERE uuid_col = UNHEX(REPLACE('43d597d7-2323-325a-90fc-21fa5947b9f3', '-', ''));
如果要将数据拉出并使UUID具有可读格式,则必须将其转换为十六进制表示法。
SELECT HEX(uuid_col) FROM table;
那个人会给你UUID而不用破折号。如果你给它不带破折号的十六进制字符串,node-uuid.parse
方法似乎有效。
答案 1 :(得分:2)
虽然N.B.的答案有效但我偶然发现了另一种解决方案。
UUID v1以基于时间的字符段开头;然而,最小的单位首先使分布在指数中分散。
如果您没有坚持精确的UUID v1格式,那么NodeJS模块可以生成基于UUID v1的唯一ID,该模块也会单调增加和缩放以及自动增加的ID。它也适用于node-mysql。
结帐:monotonic-id
node-mysql的一个例子:
var MID = require('monotonic-id');
var mid = new MID();
client.query('INSERT INTO `...` SET `mid`=?', mid.toBuffer(), function(err, res) {
...
})