これは、UUID()によって生成されたMySQL GUID/UUIDをbinary(16)に変換するために思いついた最良の方法です。
UNHEX(REPLACE(UUID(),'-',''))
そしてそれをBINARY(16)に格納します
私が知っておくべきこの方法でそれを行うことの意味はありますか?
多くの影響はありません。クエリは少し遅くなりますが、ほとんど気付かないでしょう。
UNIQUEIDENTIFIER
はとにかく内部的に_16-byte binary
_として保存されます。
バイナリをクライアントにロードしてそこで解析する場合は、_bit order
_に注意してください。最初のNEWID()
以外の文字列表現がある場合があります。
Oracle
のSYS_GUID()
関数はこの問題を起こしやすいため、文字列に変換すると、クライアントとサーバーで異なる結果が得られます。
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;