将节点中的UUID转换为二进制文件
我工作的项目切换到MySQL。 我们使用的键是UUIDstring(如43d597d7-2323-325a-90fc-21fa5947b9f3),但数据库字段而不是string被定义为二进制(16) – 16字节无符号二进制。
我知道一个UUID基本上是一个16字节的二进制文件,但是我不知道如何将二进制数字转换成二进制数字。
我正在使用node-mysql来访问数据库,我尝试使用node-uuid来parsingUUID,但是这会产生一个整数数组。 我也尝试使用节点的缓冲区 ,但只是产生一个缓冲区对象。
如何转换UUIDstring以适应该字段? 我怎么把我从这个字段读取的值变成一个UUID?
由于时间不够,我会粘贴提供了有效结果的评论,并稍后修改答案,以便更清晰。
对,如果你的JS应用中已经有了一个UUID 43d597d7-2323-325a-90fc-21fa5947b9f3
这个string格式,那么你可以把下面的查询发送给MySQL:
SELECT col FROM table WHERE uuid_col = UNHEX(REPLACE('43d597d7-2323-325a-90fc-21fa5947b9f3', '-', ''));
如果要将数据拉出并具有可读格式的UUID,则必须将其转换为hex表示法。
SELECT HEX(uuid_col) FROM table;
那个会给你没有破折号的UUID。 看来,如果你给它的hexstring没有破折号, node-uuid.parse
方法工作。
当NB的答案工作,我偶然发现另一个解决scheme。
UUID v1以基于时间的字符段开始; 然而,最小的单位首先使得分配相当分散在指数中。
如果您没有使用精确的UUID v1格式,则可能会有一个NodeJS模块可以根据UUID v1生成唯一的ID,该UUID v1也单调增加和缩放以及自动递增的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) { ... })