本節說明 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 節「連線字元集與校對」。