繁体   English   中英

mysql UUID()和java UUID.randomUUID()

[英]mysql UUID() and java UUID.randomUUID()

我想知道我是否可以安全地用java的UUID.randomUUID()函数生成的id替换用mysql的UUID()函数生成的id?

我想在我的用户的网址中分享这些ID,但几次运行后,mysql UUID()输出看起来非常相似:

3ae2c9c4-47df-11e1-8c2a-a46b34c02a9e
976de634-47e3-11e1-8c2a-a46b34c02a9e
530cc5c6-47e7-11e1-8c2a-a46b34c02a9e
...

我不是说它们不是唯一的,但这是UUID()的结果通常出现的吗? 我想它与我机器上的某些标识符有关。

Java的UUID.randomUUID()“看起来”更随机:

c042437b-298a-41c4-c2b6-0f83552bdb8b
e33d8ab7-d9d3-4ffe-a592-650a125d2a93
ecb12c54-5741-45c8-8b85-1825c19a9cae
...

从我对唯一性的天真理解,java方法生成的id应该是mysql的UUID()的完美替代品?

(使用java版本的另一个好处是,当我需要在回复客户端时提供它时,我不必重新获取使用UUID()的插入记录)

谢谢

你使用的是Linux还是FreeBSD? 从mysql的文档

第五个数字是提供空间唯一性的IEEE 802节点号。 如果后者不可用,则替换随机数(例如,因为主机没有以太网卡,或者我们不知道如何在操作系统上找到接口的硬件地址)。 在这种情况下,无法保证空间唯一性。 然而,碰撞应该具有非常低的概率。

目前,仅在FreeBSD和Linux上考虑接口的MAC地址。 在其他操作系统上,MySQL使用随机生成的48位数字。

另请注意:

警告

虽然UUID()值是唯一的,但它们不一定是不可预测的或不可预测的。 如果需要不可预测性,则应以其他方式生成UUID值。

编辑

如果您希望用户ID 看起来更随机,您可以通过像MD5(UUID())这样的散列函数传递它们,这样可以提供更有说服力的随机字符串

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM