Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 27.1Mb
PDF (A4) - 27.2Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


MySQL 5.6 リファレンスマニュアル  /  ...  /  エラーメッセージの文字セット

10.1.6 エラーメッセージの文字セット

このセクションでは、サーバーがエラーメッセージを構築しクライアントに返信する場合にどのように文字セットを使用するかについて説明します。エラーメッセージの (文字セットではなく) 言語の詳細は、セクション10.2「エラーメッセージ言語の設定」を参照してください。

MySQL 5.6 では、サーバーは、UTF-8 を使用してエラーメッセージを構築し、character_set_results システム変数で指定された文字セットでクライアントに返信します。

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

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

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

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

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

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

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

メッセージの構築後、これをクライアントに返すために、サーバーはこのメッセージを UTF-8 から、character_set_results システム変数によって指定された文字セットに変換します。character_set_resultsNULL または binary の値がある場合、変換は行われません。変数値が utf8 である場合にも、これが元のエラーメッセージの文字セットに一致するので、変換は行われません。

character_set_results で表すことができない文字の場合、変換中に一部のエンコーディングが行われることがあります。エンコーディングは、Unicode コードポイント値を使用します。

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

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

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

クライアントにエラーメッセージを返信する前に character_set_results に変換する間に行われるエンコーディングの結果、以前のバージョン (MySQL 5.5 より前のバージョン) とは異なるメッセージ内容になることがあります。たとえば、 (カタカナのペ) という名前のテーブルを削除しようとしたときにエラーが発生し、character_set_results が、この文字を含まない latin1 などの文字セットである場合、クライアントに送信される結果のメッセージには、次のようにエンコードされたテーブル名が表示されます。

ERROR 1051 (42S02): Unknown table '\30DA'

MySQL 5.5 より前では、次のように名前はエンコードされません。

ERROR 1051 (42S02): Unknown table 'ペ'

User Comments
Sign Up Login You must be logged in to post a comment.