我正在尝试向现有数据库添加一个列以存储UUID,然后检索具有该记录的UUID的行,但我一直得到一个空集。我创建了列作为BINARY(64),因为当我尝试BINARY(16)时,有些站点建议,它不足以保存数据。这是我的创建声明:
ALTER TABLE `my_table` ADD `email_uuid` BINARY(64) NULL, ADD UNIQUE (`email_uuid`)
然后我填充了它:
UPDATE `my_table` SET `email_uuid` = UUID();
为了测试它,我查询了表以获取UUID:
mysql> select emailaddr,email_uuid FROM my_table WHERE emailaddr = 'myemail@mydomain.com';
+------------------------------------------+------------------------------------------+
| emailaddr | email_uuid |
+------------------------------------------+------------------------------------------+
| myemail@mydomain.com | a332f4d4-ddb2-11e2-88f9-80ee731fd7a1 |
+------------------------------------------+------------------------------------------+
我已经尝试了几种不同的方法来恢复该行:
mysql> select emailaddr,email_uuid FROM my_table WHERE email_uuid = 'a332f4d4-ddb2-11e2-88f9-80ee731fd7a1';
Empty set (0.00 sec)
mysql> select emailaddr,email_uuid FROM my_table WHERE email_uuid = '{a332f4d4ddb211e288f980ee731fd7a1}';
Empty set (0.00 sec)
mysql> select emailaddr,email_uuid FROM my_table WHERE email_uuid = BIN('{a332f4d4ddb211e288f980ee731fd7a1}');
Empty set (0.02 sec)
mysql> select emailaddr,email_uuid FROM my_table WHERE email_uuid = '61333332663464342d646462322d313165322d383866392d38306565373331666437613100000000';
Empty set (0.00 sec)
mysql> select emailaddr,email_uuid FROM my_table WHERE email_uuid = UNHEX(REPLACE('a332f4d4-ddb2-11e2-88f9-80ee731fd7a1','-',''));
Empty set (0.02 sec)
我有什么遗失的吗?
答案 0 :(得分:0)
UUID字符串长度为36 个字节。通过这种微小的变化,它对我来说就像一个魅力:
mysql> create table U (`email_uuid` BINARY(36)):
Query OK, 0 rows affected (0.34 sec)
mysql> insert into U VALUES ( 'a332f4d4-ddb2-11e2-88f9-80ee731fd7a1' ):
Query OK, 1 row affected (0.01 sec)
mysql> select * from U where `email_uuid` = 'a332f4d4-ddb2-11e2-88f9-80ee731fd7a1':
+--------------------------------------+
| email_uuid |
+--------------------------------------+
| a332f4d4-ddb2-11e2-88f9-80ee731fd7a1 |
+--------------------------------------+
1 row in set (0.00 sec)