MySQL 8.0 リファレンスマニュアル


10.6 エラーメッセージ文字セット

このセクションでは、MySQL サーバーが文字セットを使用してエラーメッセージを作成する方法について説明します。 エラーメッセージの (文字セットではなく) 言語の詳細は、セクション10.12「エラーメッセージ言語の設定」を参照してください。 エラーロギングの構成に関する一般情報は、セクション5.4.2「エラーログ」 を参照してください。

エラーメッセージ構成の文字セット

サーバーは次のようにエラーメッセージを構築します。

  • メッセージテンプレートでは、UTF-8 (utf8mb3) が使用されます。

  • メッセージテンプレートのパラメータが、特定のエラーの発生に適用される値に置き換えられます。

    • テーブル名やカラム名などの識別子は、UTF-8 を内部で使用するので、そのままコピーされます。

    • 文字 (非バイナリ) 文字列値は、その文字セットから UTF-8 に変換されます。

    • バイナリ文字列値は、0x20 から 0x7E までの範囲のバイトの場合と同様にコピーされ、その範囲外のバイトの場合は\x 16 進数エンコーディングが使用されます。 たとえば、0x41CF9FVARBINARY の一意のカラムに挿入しようとしたときに重複キーエラーが発生した場合、生成されるエラーメッセージでは、16 進数でエンコードされた UTF-8 が使用されます:

      Duplicate entry 'A\xC3\x9F' for key 1

エラーメッセージ処理の文字セット

構成後のエラーメッセージは、サーバーによってエラーログに書き込まれるか、クライアントに送信されます:

  • サーバーは、エラーメッセージをエラーログに書き込むと、別の文字セットに変換せずに、構築されたとおりに UTF-8 に書き込みます。

  • サーバーがエラーメッセージをクライアントプログラムに送信すると、サーバーはそれを UTF-8 から character_set_results システム変数で指定された文字セットに変換します。 character_set_resultsNULL または binary の値がある場合、変換は行われません。 変数値が utf8mb3 または utf8mb4 の場合、これらの文字セットには、メッセージ構成で使用されるすべての UTF-8 文字を含むレパートリーがあるため、変換は行われません。

    character_set_results で文字を表現できない場合、変換中に一部のエンコーディングが発生する可能性があります。 エンコーディングは、Unicode コードポイント値を使用します。

    • Basic Multilingual Plane (BMP) 範囲 (0x0000 から 0xFFFF) 内の文字は、\nnnn 表記を使用して書き込まれます。

    • BMP 範囲外の文字 (0x10000 から 0x10FFFF) は、\+nnnnnn 表記を使用して書き込まれます。

    クライアントは、character_set_results を設定して、エラーメッセージを受信するときの文字セットを制御できます。 この変数は直接設定することも、SET NAMES などの手段で間接的に設定することもできます。 character_set_results の詳細は、セクション10.4「接続文字セットおよび照合順序」を参照してください。


関連キーワード:  文字, セット, 照合, 順序, エラーメッセージ, サーバー, 変換, リファレンス, 構成, サポート