为什么 uuid() 在 MariaDB 中创建非常相似的标识符?
Why uuid() creates very similar identifiers in MariaDB?
我正在为 MariaDB 创建一个代码生成器,以根据给定的 JSON.
创建一个数据库
在那JSON中,一些初始数据也存在。因此我遍历数据并将它们插入数据库。
有些列有 uuid()
默认值。
这是我的代码将数据插入 table 的结果:
Id,Guid,Key,Order
1,5c52e1db-6809-11ec-982c-0242c0a81003,New,
2,5c530e55-6809-11ec-982c-0242c0a81003,WaitingForBusinessResponse,
3,5c533551-6809-11ec-982c-0242c0a81003,WaitingForUserResponse,
4,5c536433-6809-11ec-982c-0242c0a81003,UnderInvestigation,
5,5c538ba5-6809-11ec-982c-0242c0a81003,Closed,
如您所见,UUID 值彼此非常非常接近。此列上有一个唯一索引,因此不允许重复条目。但是这些值使得跟踪它们变得困难,并且很容易将它们相互混淆。
有没有办法改变这种行为?我想告诉 MariaDB 更随机地创建 UUID。
简单的答案是“不,你不能”,除非你编写自己的 uuid 函数,该函数提供了一种从随机数或伪随机数创建 uuid() 的算法如 RFC 4122
第 4.4 章所述
MariaDB(和MySQL)的 uuid() 函数是根据 RFC 4122 实现的,但使用了创建基于时间的 uuid 的算法(参见第 4.2 章)
由于所有算法(基于名称、基于时间、随机)都提供了一个在 space 和时间中全局唯一的通用唯一标识符,我真的不明白你为什么要随时更改算法随机。
使用 uuidgen 和 mariadb 的基于时间的 uuid:
~$ uuidgen -t;uuidgen -t
a5d3c032-6865-11ec-bd1f-1740cb8be951
a5d42d24-6865-11ec-bd1f-1740cb8be951
~$ mariadb -e"select uuid()\G";mariadb -e"select uuid()\G"
*************************** 1. row ***************************
uuid(): 45aca397-683c-11ec-a913-d83bbf89f2e2
*************************** 1. row ***************************
uuid(): 45ad94dd-683c-11ec-a913-d83bbf89f2e2
我正在为 MariaDB 创建一个代码生成器,以根据给定的 JSON.
创建一个数据库在那JSON中,一些初始数据也存在。因此我遍历数据并将它们插入数据库。
有些列有 uuid()
默认值。
这是我的代码将数据插入 table 的结果:
Id,Guid,Key,Order
1,5c52e1db-6809-11ec-982c-0242c0a81003,New,
2,5c530e55-6809-11ec-982c-0242c0a81003,WaitingForBusinessResponse,
3,5c533551-6809-11ec-982c-0242c0a81003,WaitingForUserResponse,
4,5c536433-6809-11ec-982c-0242c0a81003,UnderInvestigation,
5,5c538ba5-6809-11ec-982c-0242c0a81003,Closed,
如您所见,UUID 值彼此非常非常接近。此列上有一个唯一索引,因此不允许重复条目。但是这些值使得跟踪它们变得困难,并且很容易将它们相互混淆。
有没有办法改变这种行为?我想告诉 MariaDB 更随机地创建 UUID。
简单的答案是“不,你不能”,除非你编写自己的 uuid 函数,该函数提供了一种从随机数或伪随机数创建 uuid() 的算法如 RFC 4122
第 4.4 章所述MariaDB(和MySQL)的 uuid() 函数是根据 RFC 4122 实现的,但使用了创建基于时间的 uuid 的算法(参见第 4.2 章)
由于所有算法(基于名称、基于时间、随机)都提供了一个在 space 和时间中全局唯一的通用唯一标识符,我真的不明白你为什么要随时更改算法随机。
使用 uuidgen 和 mariadb 的基于时间的 uuid:
~$ uuidgen -t;uuidgen -t
a5d3c032-6865-11ec-bd1f-1740cb8be951
a5d42d24-6865-11ec-bd1f-1740cb8be951
~$ mariadb -e"select uuid()\G";mariadb -e"select uuid()\G"
*************************** 1. row ***************************
uuid(): 45aca397-683c-11ec-a913-d83bbf89f2e2
*************************** 1. row ***************************
uuid(): 45ad94dd-683c-11ec-a913-d83bbf89f2e2