本節說明 MySQL 伺服器如何使用字元集來建構錯誤訊息。如需錯誤訊息的語言(而不是字元集)的相關資訊,請參閱第 12.12 節,「設定錯誤訊息語言」。如需設定錯誤記錄的一般資訊,請參閱第 7.4.2 節,「錯誤記錄」。
伺服器建構錯誤訊息的方式如下:
訊息範本使用 UTF-8 (
utf8mb3
)。訊息範本中的參數會取代為適用於特定錯誤發生的值
資料表或資料行名稱等識別碼在內部使用 UTF-8,因此會照原樣複製。
字元(非二進位)字串值會從其字元集轉換為 UTF-8。
二進位字串值會針對範圍
0x20
到0x7E
中的位元組照原樣複製,並針對該範圍外的位元組使用\x
十六進位編碼。例如,如果嘗試將0x41CF9F
插入VARBINARY
唯一資料行時發生重複鍵錯誤,則產生的錯誤訊息會使用 UTF-8,其中部分位元組會以十六進位編碼Duplicate entry 'A\xCF\x9F' for key 1
建構完成的錯誤訊息可以由伺服器寫入錯誤記錄或傳送至用戶端
如果伺服器將錯誤訊息寫入錯誤記錄,則會以 UTF-8 寫入,如建構時,而不會轉換為另一個字元集。
如果伺服器將錯誤訊息傳送至用戶端程式,則伺服器會將其從 UTF-8 轉換為
character_set_results
系統變數指定的字元集。如果character_set_results
的值為NULL
或binary
,則不會發生轉換。如果變數值為utf8mb3
或utf8mb4
,也不會發生轉換,因為這些字元集的字庫包含訊息建構中使用的所有 UTF-8 字元。如果字元無法以
character_set_results
表示,則轉換期間可能會發生某些編碼。編碼會使用 Unicode 碼位值基本多文種平面 (BMP) 範圍 (
0x0000
到0xFFFF
) 中的字元會使用\
符號寫入。nnnn
BMP 範圍外的字元 (
0x10000
到0x10FFFF
) 會使用\+
符號寫入。nnnnnn
用戶端可以設定
character_set_results
來控制其接收錯誤訊息時使用的字元集。可以直接設定變數,也可以透過諸如SET NAMES
等方式間接設定。如需character_set_results
的詳細資訊,請參閱第 12.4 節,「連線字元集與校對」。