2012-01-26 11 views
8

mysqlのUUID()関数で生成されたidsをjavaのUUID.randomUUID()関数で生成されたidsで安全に置き換えることができるのでしょうか?mysql UUID()とjava UUID.randomUUID()

私は私のユーザーとURLでこれらの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を使用して再フェッチ挿入されたレコード(する必要がないということです)私は、クライアントへの応答でそれを提供する必要があります)

ありがとうございました

答えて

9

linuxまたはFreeBSDをお使いですか? MySQLのdocumentationから:

第五の数は、空間 一意性を提供するIEEE 802ノード番号です。ホストコンピュータがイーサネット カードを持たないか、オペレーティングシステムの インターフェイスのハードウェアアドレスを見つける方法がわからないなど、後者が でない場合は、乱数が置換されます。この場合、空間的一意性 は保証されません。それにもかかわらず、衝突は非常に低い 確率を持っているはずです。

現在、インターフェイスのMACアドレスは、FreeBSDおよびLinuxでは のみが考慮されています。他のオペレーティングシステムでは、MySQLはランダムに生成された48ビット番号 を使用します。

も留意されたい:

警告:

UUID()の値が一意であることが意図されているが、それらは必ずしも推測できない又は予測不可能 ありません。予測不可能性が である場合、UUID値は他の方法で生成する必要があります。より説得力のランダムな文字列を与える

EDIT

あなたはにユーザーIDが必要な場合がよりランダムに表示され、あなたがMD5(UUID())のようなハッシュ関数を介してそれらを渡すことができますが、

+1

私は上ですこれはWindowsマシン上で最終的に実行されます(...)。私が推測しているのは、上記のmysql UUID()で見られていたパターンを考えれば、ユーザーには「奇妙な」ものがあると思うだろうと推測しています。実際にはそれ以上のことはありませんが、Javaメソッドを使用して生成された場合にUUIDを挿入時に最前面に置くことのボーナスは、その方向に私の好意を傾けています。ありがとう – user291701

関連する問題