第 17 章 MySQL错误代码和消息的使用

来源:互联网 发布:扫描识别文字软件 编辑:程序博客网 时间:2024/05/21 06:47

当用户以某种主机语言(如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已经读取到文件的末尾了,以此类推。