錯誤訊息可能源自於伺服器端或用戶端,每個錯誤訊息都包含一個錯誤碼、SQLSTATE 值和訊息字串,如第 B.1 節,「錯誤訊息來源與元素」中所述。有關伺服器端、用戶端和全域(伺服器和用戶端之間共用)錯誤的清單,請參閱MySQL 9.0 錯誤訊息參考。
在程式內進行錯誤檢查時,請使用錯誤碼數字或符號,而不是錯誤訊息字串。訊息字串不常變更,但有可能會變更。此外,如果資料庫管理員變更語言設定,則會影響訊息字串的語言;請參閱第 12.12 節,「設定錯誤訊息語言」。
MySQL 中的錯誤資訊可在伺服器錯誤日誌、SQL 層級、用戶端程式內以及命令列取得。
在伺服器端,某些訊息會寫入錯誤日誌。有關設定伺服器寫入日誌的位置和方式的資訊,請參閱第 7.4.2 節,「錯誤日誌」。
其他伺服器錯誤訊息會傳送至用戶端程式,並且可按照用戶端錯誤訊息介面中所述取得。
特定錯誤碼所在的範圍會決定伺服器是否將錯誤訊息寫入錯誤日誌或傳送給用戶端。有關這些範圍的資訊,請參閱錯誤碼範圍。
在 SQL 層級,MySQL 中有多個錯誤資訊來源
SQL 陳述式警告和錯誤資訊可透過
SHOW WARNINGS
和SHOW ERRORS
陳述式取得。warning_count
系統變數會指出錯誤、警告和附註的數量(如果停用sql_notes
系統變數,則會排除附註)。error_count
系統變數會指出錯誤的數量。其值會排除警告和附註。GET DIAGNOSTICS
陳述式可用於檢查診斷區域中的診斷資訊。 請參閱第 15.6.7.3 節,「GET DIAGNOSTICS 陳述式」。SHOW REPLICA STATUS
陳述式輸出包含有關在複寫伺服器上發生的複寫錯誤資訊。SHOW ENGINE INNODB STATUS
陳述式輸出包含有關最新外鍵錯誤的資訊,如果CREATE TABLE
陳述式針對InnoDB
表格失敗。
用戶端程式會從兩個來源接收錯誤
源自於 MySQL 用戶端程式庫內的用戶端錯誤。
源自於伺服器端並由伺服器傳送至用戶端的錯誤。這些錯誤會在用戶端程式庫內接收,這會使其可供主機用戶端程式使用。
特定錯誤碼所在的範圍會決定它是否源自於用戶端程式庫內,或是否由用戶端從伺服器接收。有關這些範圍的資訊,請參閱錯誤碼範圍。
無論錯誤是源自於用戶端程式庫內,還是從伺服器接收,MySQL 用戶端程式都會藉由呼叫用戶端程式庫中的 C API 函數來取得錯誤碼、SQLSTATE 值、訊息字串和其他相關資訊。
mysql_errno()
會傳回 MySQL 錯誤碼。mysql_sqlstate()
會傳回 SQLSTATE 值。mysql_error()
會傳回訊息字串。mysql_stmt_errno()
、mysql_stmt_sqlstate()
和mysql_stmt_error()
是預先處理陳述式的對應錯誤函數。mysql_warning_count()
會傳回最新陳述式的錯誤、警告和附註數量。
有關用戶端程式庫錯誤函數的說明,請參閱MySQL 9.0 C API 開發人員指南。
MySQL 用戶端程式可能會以不同的方式回應錯誤。 用戶端可以顯示錯誤訊息,以便使用者採取修正措施、在內部嘗試解決或重試失敗的操作,或採取其他動作。例如(使用 mysql 用戶端),無法連線至伺服器可能會導致下列訊息
$> mysql -h no-such-host
ERROR 2005 (HY000): Unknown MySQL server host 'no-such-host' (-2)
perror 程式會從命令列提供有關錯誤編號的資訊。 請參閱第 6.8.1 節,「perror — 顯示 MySQL 錯誤訊息資訊」。
$> perror 1231
MySQL error code MY-001231 (ER_WRONG_VALUE_FOR_VAR): Variable '%-.64s'
can't be set to the value of '%-.200s'
對於 MySQL NDB Cluster 錯誤,請使用 ndb_perror。 請參閱第 25.5.16 節,「ndb_perror — 取得 NDB 錯誤訊息資訊」。
$> ndb_perror 323
NDB error code 323: Invalid nodegroup id, nodegroup already existing:
Permanent error: Application error