錯誤訊息可能源自伺服器端或用戶端,每個錯誤訊息都包含錯誤代碼、SQLSTATE 值和訊息字串,如第 B.1 節「錯誤訊息來源和元素」中所述。如需伺服器端、用戶端和全域(在伺服器和用戶端之間共用)錯誤的列表,請參閱MySQL 8.4 錯誤訊息參考。
若要從程式中進行錯誤檢查,請使用錯誤代碼數字或符號,而不是錯誤訊息字串。訊息字串不會經常變更,但有可能會變更。此外,如果資料庫管理員變更了語言設定,這會影響訊息字串的語言;請參閱第 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 8.4 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 叢集錯誤,請使用 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