二进制
およびVARBINARY
型は,字符
およびVARCHAR
型に似ていますが,非バ,ナリ文字列ではなく,バ,ナリ文字列を格納します。。これは,それらに文字セットがなく,ソートおよび比較は値の中のバイトの数値に基づいていることを意味します。
二进制
およびVARBINARY
で許可される最大長は,字符
およびVARCHAR
の場合と同じですが,二进制
およびVARBINARY
の長さが文字数ではなくバ邮箱ト数で表される点が異なります。
二进制
およびVARBINARY
デタ型は字符的二进制
およびVARCHAR二进制
デタ型とは異なります。後者の型は,二进制
属性によってカラムがバ邮箱ナリ文字列カラムとして扱われることはありません。その代わり,これによってカラムの文字セットのバイナリ照合順序が使用され,カラム自体にはバイナリバイト文字列ではなく非バイナリ文字列が格納されます。たとえば,CHAR(5)二进制
は,デフォルト文字セットがlatin1
とすれば,CHAR(5)字符集latin1 COLLATE latin1_bin
として扱われます。これは,文字セットや照合順序を持たない5バe .トのバe .ナリ文字列を格納する二(5)
とは異なります。非バereplicationナリ文字列のバereplicationナリ照合順序とバereplicationナリ文字列の違いにereplicationいては,セクション10.1.7.6 " _binおよびbinary照合順序"を参照してください。
厳密なSQLモドが有効でない場合に二进制
またはVARBINARY
カラムにその最大長を超える値を割り当てると,その値はカラムの最大長に合わせて切り捨てられ,警告メッセージが表示されます。値を切り捨てる場合,厳密なSQLモードを使用することで,警告ではなくエラーを発生させて,その値の挿入を抑制できます。セクション5.1.7 "サバSQLモド"を参照してください。
二进制
値は格納されると,特定の長さまで右側がパッド値で埋められます。パッド値は0 x00
(ゼロバ和ト)です。値は挿入時には右側が0 x00
で埋められ、選択時に後続のバ以及トは削除されません。すべてのバトは,命令
および截然不同的
操作を含め比較で意味があります。0 x00
バ邮箱トとスペ邮箱スは比較では異なり,0 x00
<スペスです。
例:二(3)
カラムの場合,“一个”
は挿入時に' \ 0
になります。' \ 0
は挿入時に“\ \ 0”
になります。選択時,挿入された両方の値は変更されません。
VARBINARY
では,挿入時にパディングされることも,選択時にバ,トが削除されることもありません。すべてのバトは,命令
および截然不同的
操作を含め比較で意味があります。0 x00
バ邮箱トとスペ邮箱スは比較では異なり,0 x00
<スペスです。
後続のパッドバイトが取り除かれたり,比較で無視されたりする場合では,一意の値を必要とするインデックスがカラムに含まれていれば,後続のパッドバイトの個数だけが異なるカラム値への挿入は,重複キーエラーになります。たとえば,テブルに“一个”
が含まれている場合,' \ 0
を格納しようとすると,重複キエラが発生します。
バ邮箱ナリデ邮箱タの格納に二进制
データ型を使用する予定であり,取り出した値を格納した値とまったく同じにする必要がある場合は,先行のパディングと削除文字を考慮する必要があります。次の例は,二进制
値の0 x00
パディングによって,カラム値の比較がどのような影響を受けるかにいて示しています。
CREATE TABLE t (c BINARY(3));查询OK, 0行影响(0.01秒)mysql> INSERT INTO t SET c = 'a';查询OK, 1 row affected (0.01 sec) mysql> SELECT HEX(c), c = 'a', c = 'a\0\0' from t;+--------+---------+-------------+ | 十六进制(c) | c = c a | = ' \ 0 \ 0 ' | +--------+---------+-------------+ | 610000 | 0 | 1 | +--------+---------+-------------+ 1行集(0.09秒)
取り出される値を,パディングなしのストレ,ジに指定した値と同じにする必要がある場合は,代わりにVARBINARY
か,いずれかの团
デタ型を使用することをお勧めします。