これは、UUID() によって生成された MySQL GUID/UUID をバイナリ (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;