だから、コメントへの応答として。 36文字のUUIDをbinary(16)として格納する正しい方法は、次のような方法で挿入を実行することです。
INSERT INTO sometable (UUID) VALUES
(UNHEX(REPLACE("3f06af63-a93c-11e4-9797-00505690773f", "-","")))
UNHEX
UUIDはすでに16進値であるためです。トリミングします(REPLACE
)ステートメント内のダッシュで長さを32文字に減らします(16バイトはHEX
として表されます)。 )。これは、保存する前であればいつでも実行できるため、データベースで処理する必要はありません。
次のようにUUIDを取得できます:
SELECT HEX(UUID) FROM sometable;
誰かがこのスレッドに出くわし、これがどのように機能するかわからない場合に備えて。
また、覚えておいてください。UUIDを使用して行を選択する場合は、 UNHEX()
を使用してください。 条件付き :
SELECT * FROM sometable WHERE UUID = UNHEX('3f06af63a93c11e4979700505690773f');
または
SELECT * FROM sometable WHERE UUID = 0x3f06af63a93c11e4979700505690773f;
HEX()
ではありません コラム:
SELECT * FROM sometable WHERE HEX(UUID) = '3f06af63a93c11e4979700505690773f';
最後の解決策は機能しますが、MySQL HEX
が必要です。 一致する行を判別する前に、すべてのUUIDをesします。非常に非効率的です。
編集:MySQL 8を使用している場合は、SlyDaveの回答に記載されているUUID関数を確認する必要があります。この答えはまだ正しいですが、これらの関数を使用してネイティブに実行できるUUIDインデックスは最適化されていません。