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