このページは機械翻訳したものです。
このセクションでは、MySQL サーバーが文字セットを使用してエラーメッセージを作成する方法について説明します。 エラーメッセージの (文字セットではなく) 言語の詳細は、セクション10.12「エラーメッセージ言語の設定」を参照してください。 エラーロギングの構成に関する一般情報は、セクション5.4.2「エラーログ」 を参照してください。
サーバーは次のようにエラーメッセージを構築します。
メッセージテンプレートでは、UTF-8 (
utf8mb3) が使用されます。-
メッセージテンプレートのパラメータが、特定のエラーの発生に適用される値に置き換えられます。
テーブル名やカラム名などの識別子は、UTF-8 を内部で使用するので、そのままコピーされます。
文字 (非バイナリ) 文字列値は、その文字セットから UTF-8 に変換されます。
-
バイナリ文字列値は、
0x20から0x7Eまでの範囲のバイトの場合と同様にコピーされ、その範囲外のバイトの場合は\x16 進数エンコーディングが使用されます。 たとえば、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) 内の文字は、\表記を使用して書き込まれます。nnnnBMP 範囲外の文字 (
0x10000から0x10FFFF) は、\+表記を使用して書き込まれます。nnnnnn
クライアントは、
character_set_resultsを設定して、エラーメッセージを受信するときの文字セットを制御できます。 この変数は直接設定することも、SET NAMESなどの手段で間接的に設定することもできます。character_set_resultsの詳細は、セクション10.4「接続文字セットおよび照合順序」を参照してください。