错误消息可能源自服务器端或客户端,每条错误消息都包含错误代码、SQLSTATE 值和消息字符串,如 第 B.1 节“错误消息来源和元素”中所述。有关服务器端、客户端和全局(在服务器和客户端之间共享)错误的列表,请参阅MySQL 5.7 错误消息参考。
对于程序内部的错误检查,请使用错误代码编号或符号,而不是错误消息字符串。消息字符串不会经常更改,但这是可能的。此外,如果数据库管理员更改了语言设置,则会影响消息字符串的语言;参见第 10.12 节,“设置错误消息语言”。
MySQL 中的错误信息可在服务器错误日志、SQL 级别、客户端程序和命令行中获得。
在服务器端,一些消息用于错误日志。有关配置服务器在何处以及如何写入日志的信息,请参阅第 5.4.2 节,“错误日志”。
其他服务器错误消息旨在发送到客户端程序,并且如 客户端错误消息接口中所述可用。
在SQL层面,MySQL中错误信息的来源有几种:
SQL 语句警告和错误信息可通过
SHOW WARNINGS
andSHOW ERRORS
语句获得。warning_count
系统变量指示错误、警告和注释的数量(如果禁用系统变量,则不包括注释 )sql_notes
。系统error_count
变量指示错误数。它的值不包括警告和注释。该
GET DIAGNOSTICS
语句可用于检查诊断区域中的诊断信息。请参阅第 13.6.7.3 节,“GET DIAGNOSTICS 语句”。SHOW SLAVE 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 5.7 C API 开发人员指南。
MySQL 客户端程序可能以不同的方式响应错误。客户端可能会显示错误消息,以便用户可以采取纠正措施,在内部尝试解决或重试失败的操作,或采取其他措施。例如,(使用 mysql客户端),无法连接到服务器可能会导致此消息:
$> mysql -h no-such-host
ERROR 2005 (HY000): Unknown MySQL server host 'no-such-host' (0)
perror程序从命令行提供有关错误号的信息 。请参阅 第 4.8.2 节,“perror — 显示 MySQL 错误消息信息”。
$> perror 1231
MySQL error code 1231 (ER_WRONG_VALUE_FOR_VAR): Variable '%-.64s' can't
be set to the value of '%-.200s'
对于 MySQL NDB Cluster 错误,请使用ndb_perror。请参阅第 21.5.17 节,“ndb_perror — 获取 NDB 错误消息信息”。
$> ndb_perror 323
NDB error code 323: Invalid nodegroup id, nodegroup already existing:
Permanent error: Application error