sql >> データベース >  >> RDS >> Mysql

バイナリとしてのUUIDの挿入と選択(16)

    だから、コメントへの応答として。 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');
    

    またはリテラル表記 (Alexis Wilkeが述べたように):

    SELECT * FROM sometable WHERE UUID = 0x3f06af63a93c11e4979700505690773f;
    

    HEX()ではありません コラム:

    SELECT * FROM sometable WHERE HEX(UUID) = '3f06af63a93c11e4979700505690773f';
    

    最後の解決策は機能しますが、MySQL HEXが必要です。 一致する行を判別する前に、すべてのUUIDをesします。非常に非効率的です。

    編集:MySQL 8を使用している場合は、SlyDaveの回答に記載されているUUID関数を確認する必要があります。この答えはまだ正しいですが、これらの関数を使用してネイティブに実行できるUUIDインデックスは最適化されていません。

    1. SQL Serverのvarcharまたはcharフィールドで許可されているすべての特殊文字を確認するにはどうすればよいですか?

    2. Homebrewを使用して[メール保護]のKegインストールにPostgisをインストールするにはどうすればよいですか?

    3. SQL Server(T-SQL)から電子メールを送信する方法

    4. MariaDB JSON_INSERT()の説明