簡體   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