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
はstrCAST(の略でもあります。
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
