宣言
UUID_TO_BIN(string_uuid), UUID_TO_BIN(string_uuid, swap_flag)
説明
UUID_TO_BIN()は、文字列UUIDをバイナリUUIDに変換して結果を返します。文字列UUIDの形式の詳細については、**IS_uuid()**を参照してください。 UUID_TO_BIN()が返すバイナリUUIDはVARBINARY(16)型の値です。UUIDパラメータがNULLの場合、戻り値はNULLとなります。いずれかのパラメータが無効な場合、エラーが発生します。 UUID_TO_BIN()の構文には、単一パラメータ形式と二重パラメータ形式の2種類があります。説明は以下の通りです:
- 単一パラメータ形式では、文字列UUID値を指定します。バイナリ結果は文字列パラメータの順序と同じになります。
- 二重パラメータ形式では、文字列UUID値と
swap_flag値を指定します:swap_flagが0の場合、二重パラメータ形式は単一パラメータ形式と同じで、返されるバイナリ結果も文字列パラメータの順序と同じになります。swap_flagが1の場合、戻り値の形式が異なり、時間部の低い方と高い方(それぞれ16進数の最初のグループと3番目のグループ)を入れ替えます。これにより、変化の速い部分が右側に移動します。この処理は、結果をインデックス列に格納する際にインデックスの効率を向上させることができます。
時間部の入れ替えは、例えばUUID()関数で生成される値など、UUIDバージョン1の値を使用していることを前提としています。バージョン1の形式に準拠しない他の方法で生成されたUUID値には、時間部の入れ替えは適用されません。
例
以下の文字列UUID値を例にします:
SET @uuid = '6ccd780c-abcd-1026-9564-5b8c656024db';
2つの形式のUUID_TO_BIN()を使用して変換します:
obclient> SELECT HEX(UUID_TO_BIN(@uuid));
+----------------------------------+
| HEX(UUID_TO_BIN(@uuid)) |
+----------------------------------+
| 6CCD780CABCD102695645B8C656024DB |
+----------------------------------+
1 row in set
obclient> SELECT HEX(UUID_TO_BIN(@uuid, 0));
+----------------------------------+
| HEX(UUID_TO_BIN(@uuid, 0)) |
+----------------------------------+
| 6CCD780CABCD102695645B8C656024DB |
+----------------------------------+
1 row in set
obclient> SELECT HEX(UUID_TO_BIN(@uuid, 1));
+----------------------------------+
| HEX(UUID_TO_BIN(@uuid, 1)) |
+----------------------------------+
| 1026ABCD6CCD780C95645B8C656024DB |
+----------------------------------+
1 row in set
BIN_TO_UUID()を使用して、UUID_TO_BIN()が返したバイナリUUIDを文字列UUIDに変換します。UUID_TO_BIN()を呼び出して時間部を入れ替えることでバイナリUUIDを生成する場合は、2番目のパラメータとして1を指定する必要があります。同様に、BIN_TO_UUID()にも2番目のパラメータとして1を渡すことで、バイナリUUIDを元の文字列UUIDに戻す際に時間部の入れ替えを元に戻すことができます。
obclient> SELECT BIN_TO_UUID(UUID_TO_BIN(@uuid));
+--------------------------------------+
| BIN_TO_UUID(UUID_TO_BIN(@uuid)) |
+--------------------------------------+
| 6ccd780c-abcd-1026-9564-5b8c656024db |
+--------------------------------------+
1 row in set
obclient> SELECT BIN_TO_UUID(UUID_TO_BIN(@uuid,0),0);
+--------------------------------------+
| BIN_TO_UUID(UUID_TO_BIN(@uuid,0),0) |
+--------------------------------------+
| 6ccd780c-abcd-1026-9564-5b8c656024db |
+--------------------------------------+
1 row in set
obclient> SELECT BIN_TO_UUID(UUID_TO_BIN(@uuid,1),1);
+--------------------------------------+
| BIN_TO_UUID(UUID_TO_BIN(@uuid,1),1) |
+--------------------------------------+
| 6ccd780c-abcd-1026-9564-5b8c656024db |
+--------------------------------------+
1 row in set
時間部を入れ替える方向が逆の場合、元のUUIDは正しく復元できません:
obclient> SELECT BIN_TO_UUID(UUID_TO_BIN(@uuid,0),1);
+--------------------------------------+
| BIN_TO_UUID(UUID_TO_BIN(@uuid,0),1) |
+--------------------------------------+
| abcd1026-780c-6ccd-9564-5b8c656024db |
+--------------------------------------+
1 row in set
obclient> SELECT BIN_TO_UUID(UUID_TO_BIN(@uuid,1),0);
+--------------------------------------+
| BIN_TO_UUID(UUID_TO_BIN(@uuid,1),0) |
+--------------------------------------+
| 1026abcd-6ccd-780c-9564-5b8c656024db |
+--------------------------------------+
1 row in set