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
存在する場合はXXを使用する。
明示的な COLLATE
とXCOLLATE
が存在する場合はエラーになる。
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()またはCOLLATE()ファンクションを使用してください。
mysql> SELECT USER(), CHARSET(USER()), COLLATION(USER());
+----------------+-----------------+-------------------+
| USER() | CHARSET(USER()) | COLLATION(USER()) |
+----------------+-----------------+-------------------+
| test@localhost | utf8 | utf8_general_ci |
+----------------+-----------------+-------------------+
