首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql UUID()和java UUID.randomUUID()

mysql UUID()和java UUID.randomUUID()
EN

Stack Overflow用户
提问于 2012-01-26 14:28:36
回答 1查看 6.5K关注 0票数 9

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

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

代码语言:javascript
复制
3ae2c9c4-47df-11e1-8c2a-a46b34c02a9e
976de634-47e3-11e1-8c2a-a46b34c02a9e
530cc5c6-47e7-11e1-8c2a-a46b34c02a9e
...

我并不是说它们不是唯一的,但是UUID()的结果通常是这样出现的吗?我想它绑定到了我机器上的某个标识符。

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

代码语言:javascript
复制
c042437b-298a-41c4-c2b6-0f83552bdb8b
e33d8ab7-d9d3-4ffe-a592-650a125d2a93
ecb12c54-5741-45c8-8b85-1825c19a9cae
...

根据我对唯一性的天真理解,java方法生成的ids应该可以完美地替代mysql的UUID()?

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

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-26 14:34:12

你用的是linux还是FreeBSD?来自mysql的documentation

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

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

另请注意:

警告

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

编辑

如果希望用户ids看起来更随机,可以通过散列函数(如MD5(UUID()) )传递它们,该函数提供更令人信服的随机字符串

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9014644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档