Javascript 在节点中将UUID转换为二进制文件/从二进制文件转换为二进制文件
我工作的项目切换到了MySQL。我们使用的键是UUID字符串(如43d597d7-2323-325a-90fc-21fa5947b9f3),但数据库字段不是字符串,而是定义为二进制(16)-16字节无符号二进制 我知道UUID基本上是一个16字节的二进制,但我不知道如何从/转换为二进制数 我正在使用访问数据库,并尝试使用解析UUID,但这会产生一个整数数组。我还尝试使用,但这只会产生一个缓冲区对象Javascript 在节点中将UUID转换为二进制文件/从二进制文件转换为二进制文件,javascript,mysql,node.js,Javascript,Mysql,Node.js,我工作的项目切换到了MySQL。我们使用的键是UUID字符串(如43d597d7-2323-325a-90fc-21fa5947b9f3),但数据库字段不是字符串,而是定义为二进制(16)-16字节无符号二进制 我知道UUID基本上是一个16字节的二进制,但我不知道如何从/转换为二进制数 我正在使用访问数据库,并尝试使用解析UUID,但这会产生一个整数数组。我还尝试使用,但这只会产生一个缓冲区对象 如何将UUID字符串转换为该字段?如何将从该字段读取的值转换为UUID?由于时间不够,我将粘贴提供
如何将UUID字符串转换为该字段?如何将从该字段读取的值转换为UUID?由于时间不够,我将粘贴提供有效结果的注释,稍后修改答案,以便更清晰
好的,如果您的JS应用程序中已经有一个
UUID 43d597d7-2323-325a-90fc-21fa5947b9f3
格式的字符串,您将向MySQL发送以下查询:
从uuid_col=UNHEX的表格中选择col(替换('43d597d7-2323-325a-90fc-21fa5947b9f3','-','');
如果您想提取数据并使UUID具有可读格式,则必须将其转换为十六进制表示法
从表中选择十六进制(uuid\u col);
那个会给你UUID没有破折号。如果给它不带破折号的十六进制字符串,
节点uuid.parse
方法似乎有效。当N.B.的答案有效时,我偶然发现了另一个解决方案
UUID v1以基于时间的字符段开始;然而,最小的单位首先出现,使得指数中的分布相当分散
如果您不拘泥于UUID v1的精确格式,那么就有一个NodeJS模块,它可以基于UUID v1生成唯一的ID,该ID也可以单调地增加和缩放,以及自动递增的ID。它也适用于节点mysql
结帐:
节点mysql的一个示例:
var MID = require('monotonic-id');
var mid = new MID();
client.query('INSERT INTO `...` SET `mid`=?', mid.toBuffer(), function(err, res) {
...
})
这个函数应该可以让您非常接近。您提到的整数数组可能是您想要的,在您使用n.toString(16)@dandavis将它们转换回字符串之后。我尝试的第一件事是:从x中删除破折号,
y=parseInt(x,16)
->生成一个大的数字(如9.2230…e+31),但随后y.toString(16)
返回一个完全不同的数字。JavaScript无法很好地处理16字节的精度,在转换过程中可能会丢失有效数字。转换后的整数数组是什么样子的?虚线中的范围具有不同的字节大小:4-2-2-2-6(总共16个),您无法将它们解析为一个大数字,因为js数字没有那么多字节。。。有关详细信息,请参阅此节点模块是什么。你指的是这个吗?它没有解析方法。@MustafaMamun