宣言
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';
UUID_TO_BIN() の2つの形式を使用して変換します:
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() を2番目のパラメータ1を指定して呼び出し、時間部分を入れ替えることでバイナリ形式のUUIDを生成した場合は、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