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

UNHEX()関数がMySQLでどのように機能するか

    MySQLでは、UNHEX() 関数を使用すると、MySQLで文字列を「アンヘックス」できます。つまり、16進値を人間が読める形式の文字列に変換できます。

    具体的には、この関数は引数内の文字の各ペアを16進数として解釈し、その数値で表されるバイトに変換します。戻り値はバイナリ文字列です。

    構文

    構文は次のようになります:

    UNHEX(str)
    

    str 解凍する文字列です。

    例1-基本的な使用法

    基本的な例は次のとおりです。

    SELECT UNHEX('436F636F6E75742070616C6D') AS Unhexed;

    結果:

    +--------------+
    | Unhexed      |
    +--------------+
    | Coconut palm |
    +--------------+
    

    そこで、引数として16進値を指定すると、関数はその値の16進を解除し、結果(バイナリ文字列)を返しました。

    例2–文字列を16進数に変換する

    HEX()を使用して逆を行うこともできます 文字列を16進値に変換する関数:

    SELECT HEX('Coconut palm') AS Hexed;

    結果:

    +--------------------------+
    | Hexed                    |
    +--------------------------+
    | 436F636F6E75742070616C6D |
    +--------------------------+
    

    したがって、一方の関数をもう一方の関数内にネストすることができ、引数が返されるだけです。

    SELECT 
      UNHEX(HEX('Coconut palm')) AS 'Result 1',
      HEX(UNHEX('436F636F6E75742070616C6D')) AS 'Result 2';

    結果:

    +--------------+--------------------------+
    | Result 1     | Result 2                 |
    +--------------+--------------------------+
    | Coconut palm | 436F636F6E75742070616C6D |
    +--------------+--------------------------+
    

    例3–無効な16進文字

    引数には、有効な16進文字が含まれている必要があります。いずれかの文字が有効な16進文字でない場合、結果はNULLになります。 :

    SELECT 
      UNHEX(' '),
      UNHEX('_xyz');

    結果:

    +------------+---------------+
    | UNHEX(' ') | UNHEX('_xyz') |
    +------------+---------------+
    | NULL       | NULL          |
    +------------+---------------+
    

    例4–数値引数

    UNHEX() 関数は、16進数に相当する数値では機能しません。

    これが私の言いたいことの例です:

    SELECT 
      HEX(1234),
      UNHEX('4D2');

    結果:

    +-----------+--------------+
    | HEX(1234) | UNHEX('4D2') |
    +-----------+--------------+
    | 4D2       | ?            |
    +-----------+--------------+
    

    これを示す別の方法は次のとおりです。

    SELECT UNHEX(HEX(1234));

    結果:

    +------------------+
    | UNHEX(HEX(1234)) |
    +------------------+
    | ?                |
    +------------------+
    

    つまり、これが示すのは、 1234に相当する16進数であるということです。 4D2です 、およびUNHEX() 関数はその値を処理できません。

    このような場合は、CONV()を使用できます。 代わりに機能する:

    SELECT 
      HEX(1234),
      CONV('4D2', 16, 10),
      CONV(HEX(1234), 16, 10);

    結果:

    +-----------+---------------------+-------------------------+
    | HEX(1234) | CONV('4D2', 16, 10) | CONV(HEX(1234), 16, 10) |
    +-----------+---------------------+-------------------------+
    | 4D2       | 1234                | 1234                    |
    +-----------+---------------------+-------------------------+
    

    この例では、CONV()を使用します 値を基数16(16進数)から基数10(10進数)に変換します。


    1. 例外の取得ORA-00942:表またはビューが存在しません-既存の表に挿入する場合

    2. H2postgresqlモードが機能していないようです

    3. 多対多の関係の例

    4. SQLServerに対するVMwareCPUホットプラグvNUMAの影響