binary
文字セットは、バイトのシーケンスであるバイナリ文字列の文字セットです。 binary
文字セットには、binary
とも呼ばれる照合順序があります。 比較およびソートは、数値文字コード値 (マルチバイト文字の場合は数値バイト値とは異なる) ではなく、数値バイト値に基づきます。 binary
文字セットの binary
照合順序と非バイナリ文字セットの_bin
照合順序の違いについては、セクション10.8.5「バイナリ照合順序と_bin 照合順序」 を参照してください。
binary
文字セットの場合、大文字と小文字の区別およびアクセントの等価の概念は適用されません:
-
バイナリ文字列として格納されたシングルバイト文字の場合、文字境界とバイト境界は同じであるため、大文字と小文字の違いとアクセントの違いは比較で重要です。 つまり、
binary
照合では大/小文字が区別され、アクセントが区別されます。mysql> SET NAMES 'binary'; mysql> SELECT CHARSET('abc'), COLLATION('abc'); +----------------+------------------+ | CHARSET('abc') | COLLATION('abc') | +----------------+------------------+ | binary | binary | +----------------+------------------+ mysql> SELECT 'abc' = 'ABC', 'a' = 'ä'; +---------------+------------+ | 'abc' = 'ABC' | 'a' = 'ä' | +---------------+------------+ | 0 | 0 | +---------------+------------+
バイナリ文字列として格納されるマルチバイト文字の場合、文字とバイトの境界は異なります。 文字境界は失われるため、文字境界に依存する比較は意味がありません。
バイナリ文字列の大文字と小文字の変換を実行するには、まず文字列に格納されているデータに適した文字セットを使用して、非バイナリ文字列に変換します:
mysql> SET @str = BINARY 'New York';
mysql> SELECT LOWER(@str), LOWER(CONVERT(@str USING utf8mb4));
+-------------+------------------------------------+
| LOWER(@str) | LOWER(CONVERT(@str USING utf8mb4)) |
+-------------+------------------------------------+
| New York | new york |
+-------------+------------------------------------+
文字列式をバイナリ文字列に変換する場合、次の構造体は同等です:
BINARY expr
CAST(expr AS BINARY)
CONVERT(expr USING BINARY)
値が文字列リテラルの場合、_binary
イントロデューサを使用してバイナリ文字列として指定できます。 例:
_binary 'a'
_binary
イントロデューサは 16 進数リテラルおよびビット値リテラルにも使用できますが、不要です。このようなリテラルはデフォルトでバイナリ文字列です。
イントロデューサの詳細は、セクション10.3.8「文字セットイントロデューサ」 を参照してください。