第1步)
我在 Mysql 中创建表
CREATE TABLE `table_code` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`code` varchar(45) DEFAULT NULL,
`guid` binary(16) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;
第2步)
我插入一行:
INSERT INTO table_code (code,guid)
VALUES ('d1dfd973fa3d4b90a1eb47217162cd40',UNHEX('d1dfd973fa3d4b90a1eb47217162cd40'));
步骤 3)
我跑
SELECT
id,
code,
LOWER(CONCAT(LEFT(HEX(guid), 8),'-', MID(HEX(guid), 9,4), '-',MID(HEX(guid), 13,4), '-', MID(HEX(guid), 17,4), '-', RIGHT(HEX(guid), 12))),
LOWER(HEX(guid))
FROM test.table_code;
步骤 4) 结果是:
1 d1dfd973fa3d4b90a1eb47217162cd40 d1dfd973-fa3d-4b90-a1eb-47217162cd40 d1dfd973fa3d4b90a1eb47217162cd40
一切看起来都很好 - 在 Mysql 方面。
所以结论,你确定你正在插入 'd1dfd973fa3d4b90a1eb47217162cd40' (这应该通过使用 UNHEX('d1dfd973fa3d4b90a1eb47217162cd40') 来完成)或其他(反向)值。
无论如何,要把这样的字符串:“73d9dfd13dfa904ba1eb47217162cd40”变成这个“d1dfd973-fa3d-4b90-a1eb-47217162cd40”
您可以使用这样的代码:
LOWER(CONCAT(
MID(HEX(guid), 7,2),
MID(HEX(guid), 5,2),
MID(HEX(guid), 3,2),
LEFT(HEX(guid), 2),'-',
MID(HEX(guid), 11,2),
MID(HEX(guid), 9,2),'-',
MID(HEX(guid), 15,2),
MID(HEX(guid), 13,2),'-',
MID(HEX(guid), 17,4), '-',
RIGHT(HEX(guid), 12)))
我认为 Mysql 并没有给我们更简单的方法,因为没有这样的函数对二进制数据进行操作。
要检查这一点:
步骤 5)
INSERT INTO table_code (code,guid)
VALUES ('73d9dfd13dfa904ba1eb47217162cd40',UNHEX('73d9dfd13dfa904ba1eb47217162cd40'));
步骤 6)
SELECT
id,
code as `raw code`,
LOWER(CONCAT(LEFT(HEX(guid), 8),'-', MID(HEX(guid), 9,4), '-',MID(HEX(guid), 13,4), '-', MID(HEX(guid), 17,4), '-', RIGHT(HEX(guid), 12))),
LOWER(HEX(guid)) `decoded`,
LOWER(CONCAT(
MID(HEX(guid), 7,2),
MID(HEX(guid), 5,2),
MID(HEX(guid), 3,2),
LEFT(HEX(guid), 2),'-',
MID(HEX(guid), 11,2),
MID(HEX(guid), 9,2),'-',
MID(HEX(guid), 15,2),
MID(HEX(guid), 13,2),'-',
MID(HEX(guid), 17,4), '-',
RIGHT(HEX(guid), 12))) as switched
FROM test.table_code;
步骤 7) 似乎没问题。