質問

これは、UUID() によって生成された MySQL GUID/UUID を binary(16) に変換するために思いつく最良の方法です。

UNHEX(REPLACE(UUID(),'-',''))

そしてそれを BINARY(16) に保存します

この方法で行う場合に知っておくべき影響はありますか?

役に立ちましたか?

解決

多くはないの含意。これは、クエリを少し遅くなりますが、あなたはほとんどそれに気づくません。

UNIQUEIDENTIFIERが内部とにかく16-byte binaryとして格納されます。

あなたはクライアントにバイナリをロードし、そこにそれを解析し、bit orderを注意しようとしている場合は、

、それは初期NEWID()以外の文字列表現を有することができる。

OracleSYS_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;

DB-Fiddle.com デモ

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/ の

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top