質問
これは、UUID() によって生成された MySQL GUID/UUID を binary(16) に変換するために思いつく最良の方法です。
UNHEX(REPLACE(UUID(),'-',''))
そしてそれを BINARY(16) に保存します
この方法で行う場合に知っておくべき影響はありますか?
解決
多くはないの含意。これは、クエリを少し遅くなりますが、あなたはほとんどそれに気づくません。
UNIQUEIDENTIFIER
が内部とにかく16-byte binary
として格納されます。
bit order
を注意しようとしている場合は、、それは初期NEWID()
以外の文字列表現を有することができる。
Oracle
のSYS_GUID()
機能は、この問題を受けやすい文字列に変換するには、クライアントとサーバーで異なる結果が得られます。
他のヒント
MySQL 8.0 以降では、次のように使用できます。 UUID_TO_BIN:
UUID_TO_BIN(string_uuid), 、UUID_TO_BIN(string_uuid、swap_flag)
文字列 UUID をバイナリ UUID に変換し、結果を返します。(IS_UUID() 関数の説明には、許可される文字列 UUID 形式がリストされています。) 返されるバイナリ UUID は、VARBINARY(16) 値です。
CREATE TABLE t (id binary(16) PRIMARY KEY);
INSERT INTO t VALUES(UUID_TO_BIN(UUID(), true));
INSERT INTO t VALUES(UUID_TO_BIN(UUID(), true));
INSERT INTO t VALUES(UUID_TO_BIN(UUID(), true));
SELECT *, BIN_TO_UUID(id) FROM t;
Iは、8バイトの整数にそれをハッシュし、MurmurHash64Aような低衝突高効率一方向ハッシュアルゴリズムを使用して整数を格納することになります。これは、はるかに少ないスペースを使用し、インデックス化および/または上の分割することができます。 //フォージ:MySQLのmemcachedの機能(のhttpを含んでいるSourceForgeのプロジェクトがあります。 Memchachedはそれを使用していますが、私は知らないので、mysql.com/projects/project.php?id=250 の)、MurmurHash64Aが含まれる可能性があります。やMySQLのためのFNVのこの実装を見て:<のhref =「http://www.xaprb.com/blog/2008/03/09/a-very-fast-fnv-hash-function-for-mysql/」 rel = "nofollowをさnoreferrer"> http://www.xaprb.com/blog/2008/03/09/a-very-fast-fnv-hash-function-for-mysql/ の