web-dev-qa-db-ja.com

MySQL GUID / UUIDの保存

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

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

そしてそれをBINARY(16)に格納します

私が知っておくべきこの方法でそれを行うことの意味はありますか?

30
thr

多くの影響はありません。クエリは少し遅くなりますが、ほとんど気付かないでしょう。

UNIQUEIDENTIFIERはとにかく内部的に_16-byte binary_として保存されます。

バイナリをクライアントにロードしてそこで解析する場合は、_bit order_に注意してください。最初のNEWID()以外の文字列表現がある場合があります。

OracleSYS_GUID()関数はこの問題を起こしやすいため、文字列に変換すると、クライアントとサーバーで異なる結果が得られます。

8
Quassnoi

MySQL 8.0以降では、 ID_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デモ

2
Lukasz Szozda