mysql UUID()和java UUID.randomUUID()

mysql UUID()和java UUID.randomUUID(),java,mysql,Java,Mysql,我想知道我是否可以安全地将mysql的UUID()函数生成的ID替换为java的UUID.randomUUID()函数生成的ID 我希望在URL中与我的用户共享这些ID,但运行几次后,mysql UUID()输出看起来非常相似: 3ae2c9c4-47df-11e1-8c2a-a46b34c02a9e 976de634-47e3-11e1-8c2a-a46b34c02a9e 530cc5c6-47e7-11e1-8c2a-a46b34c02a9e ... 我不是说它们不是唯一的,但UUID()

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

我希望在URL中与我的用户共享这些ID,但运行几次后,mysql UUID()输出看起来非常相似:

3ae2c9c4-47df-11e1-8c2a-a46b34c02a9e
976de634-47e3-11e1-8c2a-a46b34c02a9e
530cc5c6-47e7-11e1-8c2a-a46b34c02a9e
...
我不是说它们不是唯一的,但UUID()的结果通常是这样出现的吗?我想它和我机器上的某个标识符有关

Java的UUID.randomUUID()“look”更随机:

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节点号码,它提供空间信息 独特性。如果后者不是随机数,则替换随机数 可用(例如,因为主机没有以太网) 卡,或者我们不知道如何找到一个硬件地址 操作系统上的接口)。在这种情况下,空间唯一性 不能保证。然而,碰撞应具有非常低的速度 概率

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

另请注意:

警告

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

编辑


如果你想让用户ID看起来更随机,你可以通过一个散列函数传递它们,比如
MD5(UUID())
,这会给出一个更令人信服的随机字符串

我在mac上,这个东西最终会在windows机器上运行(…)。可猜测性对我来说不是问题,考虑到我在上面看到的mysql UUID()模式,我猜我的用户会简单地认为它有点“奇怪”。实际上,没有什么比这更重要的了,但是如果使用java方法生成UUID,那么在插入时将UUID放在前面的好处就是向这个方向倾斜。谢谢