Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在表中添加和查找UUID_Mysql - Fatal编程技术网

Mysql 在表中添加和查找UUID

Mysql 在表中添加和查找UUID,mysql,Mysql,我试图向现有数据库中添加一列来存储UUID,然后用该记录的UUID检索该行,但我一直得到一个空集。我将列创建为二进制(64),因为当我按照一些站点的建议尝试二进制(16)时,它的长度不足以保存数据。以下是我的create语句: ALTER TABLE `my_table` ADD `email_uuid` BINARY(64) NULL, ADD UNIQUE (`email_uuid`) 然后我填充了它: UPDATE `my_table` SET `email_uuid` = UUID

我试图向现有数据库中添加一列来存储UUID,然后用该记录的UUID检索该行,但我一直得到一个空集。我将列创建为二进制(64),因为当我按照一些站点的建议尝试二进制(16)时,它的长度不足以保存数据。以下是我的create语句:

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)
我缺少什么吗?

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)

也许你在找这个?二进制(16)太小。当我在UUID中添加时,它被截断为“1edeaa98-ddb2-11”,我当时没有添加任何破折号。我使用UUID()设置字段,然后通过搜索电子邮件地址获得字段。这就是我在帖子中所说的。在prog级别(而不是mysql)执行此操作。。。如果你使用PHP,比如说,在PHP中进行。通常我会这样做,但我创建了一个触发器来自动创建UUID,所以我不必担心不同的脚本会这样做。你在浪费空间。很大的空间。请看这个:谢谢。有趣的是,字段长度是如何产生差异的。@DavidBélanger是的,当然。UUID的长度为128位。因此,它们只需要16字节来存储它们。我在这里假设OP正在寻找一个使用UUID的可读表示的简单解决方案。如果可以的话,重构代码以“优化”空间应该是时候了。