2016-08-28 20 views
0

0xFFをバイナリ列に挿入すると、MySql(5.7)はこれらが上位バイトであるとみなします。MySQLの16進文字列の下位バイトが最初に

カラムは(2)BINARYの場合:ちょうど便宜上

+--------------------+ 
| HEX(binary_column) | 
+--------------------+ 
| FF00    | 
+--------------------+ 

、どのようにあなたは、MySQLは、通常16進文字列を解釈することになるだろうか?

P.S.また、UNHEX()を試しました

+1

MySQLは高位バイトを想定していません。 'binary(2)'は固定長さ2の文字列で、残りの部分は最後に '\ 0'で埋められます(文字列であるため)。文字列でビットをシミュレートする場合は 'varbinary(2)'を、ビットを持つ場合は 'bit(16)'をデータ型として使用してください。 – Solarflare

答えて

1

binary実際に数値のデータ型ではありません。これは、ファイルのようなバイナリデータを格納するために使用される特別なタイプの文字列です。例えば、 charbinaryには文字マップがなく、数値コードで比較が行われます。

BINARY値が格納されている場合、彼らは右詰めパッドである:行動はThe BINARY and VARBINARY Typeを参照してください、他のプログラミング言語には文字列とバイト配列を扱い、そしてあまりにもMySQLで期待されている方法と同様であること

値を指定された長さに設定します。パッドの値は0x00(ゼロバイト)です。値は挿入時に0x00で右パディングされ、選択時に後続バイトは削除されません。すべてのバイトは、ORDER BYおよびDISTINCT操作を含む比較において重要です。 0x00バイトとスペースは0x00 <のスペースで比較が異なります。

2進数を探しているようですが、数値型を使用するとよいでしょう。たとえば、 int(またはbit(16))、まだ0xFFのような値を挿入します(これ以上のキャストなしでは'0xFF'としては表示されません)。 hex(0xFF)あなたが望む方法で。

バイナリ値を使用する場合(または8ビットを超える大きな値が必要な場合)は、lpadを使用して先行ゼロで埋め込むことができます。

select hex(lpad(0xFF,2,0x0)) 

あなたが列のサイズを知っている(またはクエリ)しなければならない、とあなたはおそらく2つのバイナリ値を追加するのは簡単な作業から始めて、これで多くの問題に実行されます。だから簡単にするために、数値型を使用してください。

関連する問題