为什么 uuid() 在 MariaDB 中创建非常相似的标识符?

问题描述 投票:0回答:1

我正在为 MariaDB 创建一个代码生成器,以根据给定的 JSON 创建数据库。

在该 JSON 中,还存在一些初始数据。因此,我循环数据并将它们插入数据库。

某些列具有

uuid()
默认值。

这是我的代码将数据插入到这样的表中的结果:

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。

mariadb
1个回答
5
投票
不,你不能

”,除非你编写自己的 uuid 函数,该函数提供了一种从随机或伪随机数创建 uuid() 的算法,如 RFC 4122 第 4.4 章所述 MariaDB(和 MySQL)的 uuid() 函数是根据 RFC 4122 实现的,但使用创建基于时间的 uuid 的算法(参见第 4.2 章)

由于所有算法(基于名称、基于时间、随机)都提供一个在空间和时间上全局唯一的通用唯一标识符,我真的不明白为什么你想将算法从时间更改为随机。

使用 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

	
© www.soinside.com 2019 - 2024. All rights reserved.