## B.2 错误信息接口 [](<>)[](<>) 错误消息可以源自服务器端或客户端,每条错误消息都包括错误代码、SQLSTATE 值和消息字符串,如中所述[第 B.1 节,“错误消息源和元素”](error-message-elements.html).有关服务器端、客户端和全局(在服务器和客户端之间共享)错误的列表,请参阅[MySQL 8.0 错误信息参考](https://dev.mysql.com/doc/mysql-errors/8.0/en/). 对于程序内部的错误检查,使用错误代码数字或符号,而不是错误消息字符串。消息字符串不会经常更改,但有可能。此外,如果数据库管理员更改语言设置,则会影响消息字符串的语言;看[第 10.12 节,“设置错误消息语言”](error-message-language.html). MySQL 中的错误信息可在服务器错误日志、SQL 级别、客户端程序内部和命令行中获得。 - [错误日志](error-interfaces.html#error-interface-log) - [SQL 错误消息接口](error-interfaces.html#error-interface-sql) - [客户端错误消息接口](error-interfaces.html#error-interface-client) - [命令行错误消息接口](error-interfaces.html#error-interface-command) ### 错误日志 在服务器端,一些消息用于错误日志。有关配置服务器写入日志的位置和方式的信息,请参阅[第 5.4.2 节,“错误日志”](error-log.html). 其他服务器错误消息旨在发送到客户端程序,并且如中所述可用[客户端错误消息接口](error-interfaces.html#error-interface-client). 特定错误代码所在的范围决定了服务器是将错误消息写入错误日志还是发送给客户端。有关这些范围的信息,请参阅[错误代码范围](error-message-elements.html#error-code-ranges). ### SQL 错误消息接口 在 SQL 级别,MySQL 中有几个错误信息来源: - SQL 语句警告和错误信息可通过[`显示警告`](show-warnings.html)和[`显示错误`](show-errors.html)陈述。这[`警告计数`](server-system-variables.html#sysvar_warning_count)系统变量指示错误、警告和注释的数量(如果注释被排除在[`sql_notes`](server-system-variables.html#sysvar_sql_notes)系统变量被禁用)。这[`错误计数`](server-system-variables.html#sysvar_error_count)系统变量表示错误的数量。它的值不包括警告和注释。 - 这[`得到诊断`](get-diagnostics.html)语句可用于检查诊断区域中的诊断信息。看[第 13.6.7.3 节,“获取诊断声明”](get-diagnostics.html). - [`显示奴隶状态`](show-slave-status.html)语句输出包括有关复制服务器上发生的复制错误的信息。 - [`显示引擎 INNODB 状态`](show-engine.html)语句输出包括有关最近的外键错误的信息,如果[`创建表`](create-table.html)声明[`InnoDB`](innodb-storage-engine.html)表失败。 ### 客户端错误消息接口 客户端程序从两个来源接收错误: - 源自 MySQL 客户端库中客户端的错误。 - 源自服务器端并由服务器发送到客户端的错误。这些是在客户端库中接收的,这使得它们可用于主机客户端程序。 特定错误代码所在的范围决定了它是来自客户端库还是客户端从服务器接收到的。有关这些范围的信息,请参阅[错误代码范围](error-message-elements.html#error-code-ranges). 无论错误来自客户端库内部还是来自服务器端,MySQL 客户端程序通过调用客户端库中的 C API 函数来获取错误代码、SQLSTATE 值、消息字符串和其他相关信息: - [`mysql_errno()`](https://dev.mysql.com/doc/c-api/8.0/en/mysql-errno.html)返回 MySQL 错误代码。 - [`mysql_sqlstate()`](https://dev.mysql.com/doc/c-api/8.0/en/mysql-sqlstate.html)返回 SQLSTATE 值。 - [`mysql_error()`](https://dev.mysql.com/doc/c-api/8.0/en/mysql-error.html)返回消息字符串。 - [`mysql_stmt_errno()`](https://dev.mysql.com/doc/c-api/8.0/en/mysql-stmt-errno.html),[`mysql_stmt_sqlstate()`](https://dev.mysql.com/doc/c-api/8.0/en/mysql-stmt-sqlstate.html), 和[`mysql_stmt_error()`](https://dev.mysql.com/doc/c-api/8.0/en/mysql-stmt-error.html)是准备好的语句的相应误差函数。 - [`mysql_warning_count()`](https://dev.mysql.com/doc/c-api/8.0/en/mysql-warning-count.html)返回最新语句的错误、警告和注释的数量。 有关客户端库错误函数的说明,请参见[MySQL 8.0 C API 开发者指南](https://dev.mysql.com/doc/c-api/8.0/en/). MySQL 客户端程序可能以不同的方式响应错误。客户端可能会显示错误消息,以便用户可以采取纠正措施,在内部尝试解决或重试失败的操作,或采取其他措施。例如,(使用[**mysql**](mysql.html)客户端),无法连接到服务器可能会导致此消息: ``` $> mysql -h no-such-host ERROR 2005 (HY000): Unknown MySQL server host 'no-such-host' (-2) ``` ### 命令行错误消息接口 这[**错误**](perror.html)程序从命令行提供有关错误号的信息。看[第 4.8.2 节,“perror - 显示 MySQL 错误消息信息”](perror.html). ``` $> 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 错误,请使用[**数据库\_错误**](mysql-cluster-programs-ndb-perror.html).看[第 23.5.16 节,“ndb_perror - 获取 NDB 错误消息信息”](mysql-cluster-programs-ndb-perror.html). ``` $> ndb_perror 323 NDB error code 323: Invalid nodegroup id, nodegroup already existing: Permanent error: Application error ```