MySql UUID重复BUG

Ily*_*man 1 mysql uuid duplicates

我在MySql 5.5.19中发现了一个错误.

执行时:

select uuid(), uuid();
Run Code Online (Sandbox Code Playgroud)

你得到两个等于id.

当我将两个uuids插入到我的表中时,我遇到了两个这个bug,我总是得到相同的值.

有没有其他人在这两个错误中运行?如何为我的键执行需要两个uuids的insert命令?

编辑:

实际上我错了,他们在一位数上是不同的,所以很难看到

c3db913 7 -705e-11e1-ae17-1c6f6531b785
c3db913 f -705e-11e1-ae17-1c6f6531b785

Sho*_*ker 10

我坚信你没有得到重复的值,但是一些几乎相同的值(可能是1个不同的字符).由于该UUID的第一个块是从以毫秒为单位的时间戳产生的事实,这将意味着功能在同一毫秒执行(你运行它的超级计算机?),其中,说实话,是极不可能的.如果您真的得到重复项,那么运行两个单独的SELECT uuid()查询并使用所需查询中返回的值


小智 9

这不是 uuid() 函数的错误

出现意外结果是因为您的字符集客户端和字符集结果不是utf8时发生了不显式转换;

1 uuid() 输出是 utf8,无论您的字符集是什么;

2 当您的字符集客户端和字符集结果是一些比 utf8 高优先级的字符集(例如 utf8mb4 )时,就会发生隐式转换,其他优先级较低的字符集(例如 latin1)也可以正常工作;

3 隐式转换会在 sql 执行前将 uuid() 变成常量字符串,所以在 sql 执行完成后,同样的 uuid() 返回

您可以通过使用解释扩展+您的子句,然后使用显示警告来查看所有这些发生的情况;

怎么解决 ?1 将非显式转换为显式转换,例如:set names utf8mb4; 替换(转换(uuid()使用utf8mb4),'-','')

或者

设置名称 utf8mb4; 替换( uuid(),_utf8'-',_utf8'')

2 aviod 隐式转换例如:set names utf8

在此处输入链接描述


Mic*_*ski 7

来自文档 A UUID被设计为在空间和时间上全球唯一的数字. 由于查询是在执行之前编译的,因此您UUID()在同一时刻调用两次.因此,您不能指望它在同一查询中返回两个唯一值,因为两个值都使用相同的时间戳.这对我来说听起来像是预期的行为.

  • 我能做些什么来让它在同一个时间戳中独一无二? (4认同)