各文字列リテラルにはキャラクタセットと照合順序があり、いずれもヌルにすることはできません。
文字列リテラルでは、オプションとしてキャラクタセットイントロデューサと COLLATE 節を指定することができます。
[_character_set_name]'string' [COLLATE collation_name]
例:
SELECT 'string'; SELECT _latin1'string'; SELECT _latin1'string' COLLATE latin1_danish_ci;
単純なステートメント
SELECT 'string' では、接続/リテラルキャラクタセットが使用されます。
_character_set_name は以前、イントロデューサと呼ばれていました。指定すると、``キャラクタセット X の文字列が後続する'' ことがパーサに通知されます。
上記はユーザの混乱を招いていたため、ここで強調しておきますが、イントロデューサは変換の原因にはならず、文字列の値が変更されないことを示すにすぎません。標準的な 16 進リテラルおよび数値 16 進リテラルの表記(x'literal' および 0xnnnn)の前と ?(用意されたステートメントをプログラミング言語インタフェースで使用する際のパラメータ代替)の前でも、イントロデューサは有効です。
例:
SELECT _latin1 x'AABBCC'; SELECT _latin1 0xAABBCC; SELECT _latin1 ?;
MySQL では、リテラルのキャラクタセットおよび照合順序が次のように決定されます。
_X と COLLATE Y の両方が指定された場合、リテラルキャラクタセットは X、リテラル照合順序は Y。
_X は指定されており、COLLATE が指定されていない場合、リテラルキャラクタセットは X、リテラル照合順序は Xのデフォルト照合順序。
その他の場合は、接続/リテラルのキャラクタセットおよび照合順序。
例:
文字列に latin1 キャラクタセットと latin1_german1_ci 照合順序が指定されている場合
SELECT _latin1'Muller' COLLATE latin1_german1_ci;
文字列に latin1 キャラクタセットとそのデフォルト照合順序(latin1_swedish_ci)が指定されている場合
SELECT _latin1'Muller';
文字列に接続/リテラルのキャラクタセットおよび照合順序が指定されている場合
SELECT 'Muller';
キャラクタセットイントロデューサと COLLATE 節は、標準 SQL の指定に基づき実装されます。