BINARY
演算子は、それに続く文字列をバイナリ文字列にキャストします。これは、比較を文字ごとでなくバイトごとに強制的に実行させる簡単な方法です。また、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
のカラム属性としての効果は、MySQL 4.1 より前の効果とは異なります。以前は、BINARY
は、バイナリ文字列として扱われたカラムになっていました。バイナリ文字列は、文字セットや照合順序がないバイトの文字列であり、バイナリ照合順序を持つ非バイナリ文字列とは異なります。どちらのタイプの文字列についても、比較は文字列単位の数値に基づいて行われますが、非バイナリ文字列については、単位は文字であり、文字セットによってはマルチバイト文字をサポートします。セクション11.4.2「BINARY および VARBINARY 型」を参照してください。
CHAR
、VARCHAR
、または TEXT
カラムの定義で CHARACTER SET binary
を使用すると、このカラムはバイナリデータ型として扱われます。たとえば、次のペアになった定義は同等です。
CHAR(10) CHARACTER SET binary
BINARY(10)
VARCHAR(10) CHARACTER SET binary
VARBINARY(10)
TEXT CHARACTER SET binary
BLOB