宣言
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を生成した場合、バイナリUUIDを文字列UUIDに変換する際に時間部分の入れ替えを解除するためには、BIN_TO_UUID()にも同じく2番目のパラメータを1渡す必要があります。
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