このセクションでは、MySQL サーバーが文字セットを使用してエラーメッセージを作成する方法について説明します。 エラーメッセージの (文字セットではなく) 言語の詳細は、セクション10.12「エラーメッセージ言語の設定」を参照してください。 エラーロギングの構成に関する一般情報は、セクション5.4.2「エラーログ」 を参照してください。
サーバーは次のようにエラーメッセージを構築します。
メッセージテンプレートでは、UTF-8 (
utf8mb3
) が使用されます。-
メッセージテンプレートのパラメータが、特定のエラーの発生に適用される値に置き換えられます。
テーブル名やカラム名などの識別子は、UTF-8 を内部で使用するので、そのままコピーされます。
文字 (非バイナリ) 文字列値は、その文字セットから UTF-8 に変換されます。
-
バイナリ文字列値は、
0x20
から0x7E
までの範囲のバイトの場合と同様にコピーされ、その範囲外のバイトの場合は\x
16 進数エンコーディングが使用されます。 たとえば、0x41CF9F
をVARBINARY
の一意のカラムに挿入しようとしたときに重複キーエラーが発生した場合、生成されるエラーメッセージでは、16 進数でエンコードされた UTF-8 が使用されます:Duplicate entry 'A\xC3\x9F' for key 1
構成後のエラーメッセージは、サーバーによってエラーログに書き込まれるか、クライアントに送信されます:
サーバーは、エラーメッセージをエラーログに書き込むと、別の文字セットに変換せずに、構築されたとおりに UTF-8 に書き込みます。
-
サーバーがエラーメッセージをクライアントプログラムに送信すると、サーバーはそれを UTF-8 から
character_set_results
システム変数で指定された文字セットに変換します。character_set_results
にNULL
または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「接続文字セットおよび照合順序」を参照してください。