我想知道是否可以安全地将mysql的UUID()函数生成的I替换为java的UUID.randomUUID()函数生成的I?
我希望在urls中与我的用户共享这些in,但经过几次运行后,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方法生成的ids应该可以完美地替代mysql的UUID()?
(使用java版本的另一个好处是,当我需要在回复客户端时使用UUID()时,我不必重新获取插入的记录)
谢谢
发布于 2012-01-26 14:34:12
你用的是linux还是FreeBSD?来自mysql的documentation
第五个数字是提供空间唯一性的IEEE802节点编号。如果后者不可用(例如,因为主机计算机没有以太网卡,或者我们不知道如何在您的操作系统上找到接口的硬件地址),则替换为随机数。在这种情况下,无法保证空间唯一性。然而,碰撞的概率应该非常低。
目前,仅在FreeBSD和Linux上考虑接口的MAC地址。在其他操作系统上,MySQL使用随机生成的48位数字。
另请注意:
警告:
尽管UUID()值应该是唯一的,但它们不一定不可猜测或不可预测。如果需要不可预测性,则应该以其他方式生成UUID值。
编辑
如果希望用户ids看起来更随机,可以通过散列函数(如MD5(UUID()) )传递它们,该函数提供更令人信服的随机字符串
https://stackoverflow.com/questions/9014644
复制相似问题