MySQL には、文字列を返す多数の演算子と関数があります。 このセクションでは、そのような文字列の文字セットと照合順序について説明します。
文字列の入力を取得して文字列の結果を出力として返す単純な関数では、出力の文字セットおよび照合順序は、主要な入力値の文字セットおよび照合順序と同じです。 たとえば、UPPER(
は、X
)X
と同じ文字列および照合順序を持つ文字列を返します。 同じことは、INSTR()
、LCASE()
、LOWER()
、LTRIM()
、MID()
、REPEAT()
、REPLACE()
、REVERSE()
、RIGHT()
、RPAD()
、RTRIM()
、SOUNDEX()
、SUBSTRING()
、TRIM()
、UCASE()
、および UPPER()
についても当てはまります。
REPLACE()
関数は、他のすべての関数とは異なり、常に文字列入力の照合を無視し、大/小文字を区別する比較を実行します。
文字列入力または関数結果がバイナリ文字列の場合、文字列は binary
文字セットおよび照合順序を持ちます。 これは、CHARSET()
および COLLATION()
関数を使用してチェックできます。どちらの関数もバイナリ文字列引数に binary
を返します:
mysql> SELECT CHARSET(BINARY 'a'), COLLATION(BINARY 'a');
+---------------------+-----------------------+
| CHARSET(BINARY 'a') | COLLATION(BINARY 'a') |
+---------------------+-----------------------+
| binary | binary |
+---------------------+-----------------------+
複数の文字列入力を組み合わせて単一の文字列出力を返す演算では、結果の照合順序の特定に次の標準 SQL の「アグリゲーションルール」が適用されます。
明示的な
COLLATE
が発生した場合は、Y
Y
を使用します。明示的な
COLLATE
およびY
COLLATE
が発生した場合は、エラーが発生します。Z
それ以外の場合、すべての照合順序が
Y
であれば、Y
を使用します。その他の場合、結果に照合順序はありません。
たとえば、CASE ... WHEN a THEN b WHEN b THEN c COLLATE
と指定されている場合、結果の照合順序は X
ENDX
になります。 同じことは、UNION
、||
、CONCAT()
、ELT()
、GREATEST()
、IF()
、および LEAST()
にも当てはまります。
文字データに変換する操作の場合、操作によって生成される文字列の文字セットと照合順序は、デフォルトの接続文字セットと照合順序を決定する character_set_connection
および collation_connection
システム変数によって定義されます (セクション10.4「接続文字セットおよび照合順序」 を参照)。 これは、BIN_TO_UUID()
, CAST()
, CONV()
, FORMAT()
, HEX()
および SPACE()
にのみ適用されます。
仮想生成カラムの式では、前述の原則の例外が発生します。 このような式では、接続文字セットに関係なく、テーブルの文字セットが BIN_TO_UUID()
、CONV()
または HEX()
の結果に使用されます。
文字列関数によって返される結果の文字セットまたは照合順序に関する質問がある場合は、CHARSET()
または COLLATION()
関数を使用して次を確認してください:
mysql> SELECT USER(), CHARSET(USER()), COLLATION(USER());
+----------------+-----------------+-------------------+
| USER() | CHARSET(USER()) | COLLATION(USER()) |
+----------------+-----------------+-------------------+
| test@localhost | utf8 | utf8_general_ci |
+----------------+-----------------+-------------------+
mysql> SELECT CHARSET(COMPRESS('abc')), COLLATION(COMPRESS('abc'));
+--------------------------+----------------------------+
| CHARSET(COMPRESS('abc')) | COLLATION(COMPRESS('abc')) |
+--------------------------+----------------------------+
| binary | binary |
+--------------------------+----------------------------+