将节点中的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) { ... })