第 17 章 MySQL錯誤代碼和消息的使用

當用戶以某種主機語言(如java)調用MySQL時,有可能出現操作的錯誤,用戶必須通過MySQL的錯誤提示來修改錯誤。本章列出了服務器錯誤代碼和錯誤消息,以及客戶端程序錯誤代碼和錯誤消息供用戶參閱。

17.1 MySQL服務器端錯誤代碼和消息

MySQL 5.6是根據MySQL安裝目錄下的share/errmsg.txt文件來生成include/mysqld_error.h和include/mysqld_ername.h中的錯誤定義的。另外,SQLSTATE的值也是根據share/errmsg.txt文件中的內容來生成include/sql_state.h的。
默認情況下服務器出錯代碼都是以 1 開頭的,比如:1371 SQLSTATE:HY000(ER_RELAY_LOG_FAIL),該消息的錯誤代碼爲1371,該消息表示“清除舊中繼日誌失敗”。
在查看share/errmsg.txt文件時會發現消息信息中包含%d、%ld和%s,%d和%ld代表數值,%s代表字符串,在顯示具體信息時它們將被消息值取代。比如:錯誤代碼爲1146的錯誤信息在share/errmsg.txt顯示爲“Table‘%-.192s.%-.192s’doesn’t exist”,即“表‘ ’%-.192s.%-.192s’不存在”。其中,“%-.192s”可表示左對齊192個字符寬度,可理解爲此處輸出爲佔位字符串,在顯示具體信息時迴避字符串消息替換,在附錄A中直接表示爲“表’%s.%s’不存在”。

17.2 MySQL客戶端錯誤代碼和消息

MySQL 5.6是根據MySQL安裝目錄下的include/errmsg.h文件來生成錯誤代碼的。
消息值與libmysql/errmsg.c文件中列出的錯誤消息對應。%d和%s分別代表數值和字符串,顯示時,它們都被消息值取代,這一點和服務器端錯誤代碼顯示的方式一樣。默認情況下客戶端出錯代碼都是以 2 開頭的,比如:錯誤消息“服務器握手過程出錯”的錯誤值爲2012,錯誤代碼爲CR_SERVER_HANDSHAKE_ERR。
附錄B中給出了常見的客戶端錯誤代碼、錯誤值和對應的錯誤信息。也給出了其他錯誤代碼和錯誤信息。必須說明的是:由於MySQL的版本不斷升級,可能出錯代碼和出錯信息會隨着版本的變化而變化。

17.3 高手點撥

MySQL中的perror命令是一個很有用的工具,它可以幫助用戶查找錯誤信息,在沒有網絡的時候這個命令尤其的重要,有些錯誤代碼有提示,有的則沒有,perror命令來打印錯誤信息。例如:得到錯誤代碼爲137的話執行perror,並顯示錯誤提示。
D:\mysql-5.0.22\bin>perror137
MySQL error code 137:No more recorde(read after end of file)
所以錯誤的原因是MySQL已經讀取到文件的末尾了,以此類推。

發佈了50 篇原創文章 · 獲贊 3 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章