我想知道我是否可以安全地用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()的插入记录。
谢谢
答案 0 :(得分:9)
您使用的是Linux还是FreeBSD?来自mysql的documentation:
第五个数字是提供空间的IEEE 802节点号 独特之处。如果后者不是,则替换随机数 可用(例如,因为主机没有以太网 卡,或者我们不知道如何找到一个的硬件地址 操作系统上的界面)。在这种情况下,空间的唯一性 无法保证。然而,碰撞应该非常低 概率。
目前,仅考虑接口的MAC地址 在FreeBSD和Linux上。在其他操作系统上,MySQL使用了 随机生成48位数字。
另请注意:
警告强>:
虽然UUID()值是唯一的,但它们不是唯一的 必然是不可思议或不可预测的。如果不可预测的话 必需的,UUID值应该以其他方式生成。
修改强>
如果您希望用户ID 出现更随机,您可以通过像MD5(UUID())
这样的散列函数传递它们,这样可以提供更有说服力的随机字符串