本節說明 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) 中的字元會使用\符號寫入。nnnnBMP 範圍之外 (
0x10000到0x10FFFF) 的字元會使用\+符號寫入。nnnnnn
用戶端可以設定
character_set_results來控制他們接收錯誤訊息所用的字元集。可以透過直接方式,或透過SET NAMES等間接方式來設定變數。關於character_set_results的更多資訊,請參閱第 12.4 節「連線字元集與校對」。