Mysql 如何正确地将uuid转换为二进制(16)?

Mysql 如何正确地将uuid转换为二进制(16)?,mysql,node.js,sequelize.js,uuid,Mysql,Node.js,Sequelize.js,Uuid,我在mysql表中有一个类型为BINARY(16)的id字段 我生成以下id:66e2105c-bff5-4206-a9cc-E212F562238 使用此代码: const v = uuidV4Bytes(16); 通过sequalize插入的内容是: INSERT INTO SPORTS(Id,Name,HouseId,Date,Active) VALUES ('66e2105c-bff5-4206-a9cc-e212f5622368','SPORTNAME',1, '20

我在mysql表中有一个类型为
BINARY(16)
的id字段


我生成以下id:
66e2105c-bff5-4206-a9cc-E212F562238

使用此代码:

const v = uuidV4Bytes(16);
通过sequalize插入的内容是:

INSERT INTO SPORTS(Id,Name,HouseId,Date,Active)
        VALUES ('66e2105c-bff5-4206-a9cc-e212f5622368','SPORTNAME',1, '2020-05-04', 0)
问题:

Error Code: 1406. Data too long for column 'Id' at row 
我试图将uuid转换为二进制(16),但显然我得到了一个非常大的值。
如何解决这个问题?

只要它总是以
8-4-4-4-12
十六进制字符的形式出现,您就可以让MySQL用REPLACE()和UNHEX()为您解决这个问题


多亏了@hanshenrik,我开始寻找在nodeexpress中使用UNHEX的方法

我发现:

const byteValue = Buffer.from(uuidV4Bytes(16).replace('-', ''), 'hex')

这就成功了。不过,我不能说这是最理想的方法,但它解决了我的问题

看起来您的列名和数据有点混乱<代码>名称:1?HouseId:SPORTNAME??只是一个复制粘贴问题,已更新。主要问题仍然存在,超过16个字节。它更像是36个字节。我收集了这些数据,但问题是我在这方面是新手,据我所知,这些方法应该生成16个字节,但我遗漏了一些东西。@RiggsFolly是的,但破折号的位置永远不会改变,也不必存储,所以剩下32个字符,这32个字符是base16十六进制的,如果将这32个字符从base16(十六进制)转换为base256(字节),那么剩下的是16个base256字符(或16字节)^^^我的大脑开始寻找正确的东西。我下面的回答是我的做法,但我接受了这一点,因为它为我指明了正确的方向。谢谢如果我需要执行类似于
SELECT id,fname FROM table_name的查询,其中id=UNHEX(REPLACE('4568-7899-2543-8yu5',“-”,“-”)
,它会返回如下结果:
id:@bubble cord maybe
SELECT CONCAT(HEX(SUBSTRING(id,1,4)),“-”,HEX(SUBSTRING(id,5,2)),“-”,HEX(SUBSTRING(id,7,2)),“-”,HEX(SUBSTRING)(SUBSTRING(id,9,2)),“-”,HEX”)(子字符串(id,11,6))作为'id','fname',来自表_name,其中id='4568-7899-2543-8yu5'
const byteValue = Buffer.from(uuidV4Bytes(16).replace('-', ''), 'hex')