BINARY
オペレータは2進性の文字列に続く文字列を送信します。キャラクタ毎よりも、バイト毎の比較を強制的に行う簡単な方法です。BINARY
は後続のスペースにも重要な意味を持たせます。
mysql>SELECT 'a' = 'A';
-> 1 mysql>SELECT BINARY 'a' = 'A';
-> 0 mysql>SELECT 'a' = 'a ';
-> 1 mysql>SELECT BINARY 'a' = 'a ';
-> 0
BINARY
はstr
CAST(
の略でもあります。
str
AS BINARY)
キャラクタカラム定義のBINARY
性質は別の効果があります。BINARY
性質で定義されたキャラクタカラムはカラムのキャラクタセットの二進節を割り当てられます。全てのキャラクタセットに二進節があります。例えば、latin1
キャラクタセットの二進節はlatin1_bin
です。よってデフォルトキャラクタセットがlatin1
の場合、下記の2カラムの定義は等価になります。
CHAR(10) BINARY CHAR(10) CHARACTER SET latin1 COLLATE latin1_bin
BINARY
のカラム性質としての効果はMySQL4.1.の時のそれと効果に違いがあります。以前、BINARY
は結果二進文字列として扱われたカラムになりました。二進文字列は、キャラクタセットや照合順序のないバイトの列で、二進照合順序のある非二審キャラクタ文字列とは違います。両文字列にとって、比較は文字列のユニットの数値をもって行われます。しかし非二審文字列にとってはユニットはキャラクタであり、キャラクタセットの中にはマルチバイトキャラクタを許容しているものもあります。
項10.4.2. 「BINARY
と VARBINARY
タイプ」.
CHARACTER SET
binary
のCHAR
、VARCHAR
あるいはTEXT
カラム定義での使用は二進性のデータタイプとしてカラムを扱うことになります。例えば、下記の定義は等価です
CHAR(10) CHARACTER SET binary BINARY(10) VARCHAR(10) CHARACTER SET binary VARBINARY(10) TEXT CHARACTER SET binary BLOB