各接続には接続キャラクタセットと接続照合順序があり、いずれもヌルにすることはできません。実際には 2 つの接続キャラクタセットが存在するため、両者の区別が必要な場合は ``接続/リテラル'' および ``接続/結果'' の呼称を使い分けています。
``接続'' とは、サーバへの接続時に作成されるものです。クライアントは接続を介し、SQL ステートメント(クエリなど)をサーバに送信します。サーバでは接続を介し、応答(結果セットなど)をクライアントに返します。これによって、次のような疑問が生じます。(a) クライアントから送信される際にどのキャラクタセットでクエリが送られるのか。(b) サーバではクエリを受信した後にどのキャラクタセットに変換するのか。(c) サーバでは結果セットまたはエラーメッセージをクライアントに返送する前にどのキャラクタセットに変換するのか。これらは細かく調整することができますが、デフォルトを適用することもできます。デフォルトを適用する場合、このセクションをとばしてかまいません。
接続キャラクタセットに影響するステートメントが 2 つ存在します。
SET NAMES character_set_name SET CHARACTER SET character_set_name
        SET NAMES
        は、クライアントから送信される SQL
        ステートメントのキャラクタセットを示します。たとえば、SET
        NAMES cp1251 は
        「このクライアントからの入力メッセージは今後、キャラクタセット
        cp1251 になります」
        とサーバに通知します。サーバでは適宜、独自のキャラクタセットへと自由に変換することができます。
      
        SET CHARACTER SET
        は、クライアントから送信される SQL
        ステートメントのキャラクタセットと、サーバからクライアントに返される結果セットのキャラクタセットを示します。そのため
        SET CHARACTER SET は、SET
        NAMES を含んでいるほか、たとえば
        SELECT
        ステートメントを使用する際にどのキャラクタセットでカラムに値が保持されるかを示します。
      
        例:column1 が CHAR(5) CHARACTER
        SET latin2
        として定義されているとします。SET
        CHARACTER SET
        が指定されていない場合、SELECT column1 FROM
        t に対しサーバは、キャラクタセット
        latin2 を使用して
        column1
        の値をすべて返します。一方、SET CHARACTER
        SET latin1
        が指定されている場合、サーバは送信前に
        latin2 の値を latin1
        に変換します。そのような変換は低速であり、損失につながることもあります。
      
        SET NAMES または SET CHARACTER
        SET の実行時には、``接続照合順序''
        も変更していることになります。ただし、接続照合順序は整合性の維持のみを目的として存在しています。通常、その値は重要ではありません。
      
        mysql
        クライアントでは、起動するたびに SET
        NAMES
        を実行する必要はありません。--default-character-set-name
        オプション設定を mysql
        のコマンドラインか、オプションファイルに追加することができます。
        たとえば、以下のオプション設定ファイルの設定では、mysql
        を実行するたびに接続キャラクタセットが指定されます。
      
[mysql] default-character-set-name=character_set_name
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.

