长度不一致的原因是,您的二进制输出产生的一些奇怪的字符被编码为UTF-8字符,每个字符占用超过一个字节.
例如,请看前五个字符,"Ossí{"
mysql> select hex(UUID_TO_BIN('7be7daf5-73ef-4f73-a784-46ea44403293',1)) as hex;
+----------------------------------+
| hex |
+----------------------------------+
| 4F7373EF7BE7DAF5A78446EA44403293 |
+----------------------------------+
O s s ï {
字节EF是ai的Latin1 encoding,因此与该字节最接近的可打印字符输出为aid.
但是,然后您复制和粘贴字符串,它将被转换为UTF-8编码,其中YI具有多字节序列.
mysql> select hex('Ossï{çÚõ§„FêD@2“') as hex;
+------------------------------------------------------+
| hex |
+------------------------------------------------------+
| 4F7373C3AF7BC3A7C39AC3B5C2A7E2809E46C3AA444032E2809C |
+------------------------------------------------------+
O s s ï {
您可以看到aii在UTF-8中被编码为C3AF(两个字节),后跟{AS 7B.
这个字符串中还有其他几个多字节字符;我只想提醒大家注意第一个字符.
当您复制和粘贴一个带有有趣的非ASCII字符的字符串时,它不是二进制字节,而是一个UTF-8字符的字符串,其中一些是多字节的.
如果避免复制&;粘贴字符串,则可以获得预期的二进制字节长度:
mysql> SELECT LENGTH(UUID_TO_BIN('7be7daf5-73ef-4f73-a784-46ea44403293',1)) as len;
+------+
| len |
+------+
| 16 |
+------+
因此,当您向表中插入时,请使用它:
mysql> insert into uuid set id = 'Ossï{çÚõ§„FêD@2“';
ERROR 1406 (22001): Data too long for column 'id' at row 1
mysql> insert into uuid set id = UUID_TO_BIN('7be7daf5-73ef-4f73-a784-46ea44403293',1);
Query OK, 1 row affected (0.00 sec)