#### 13.7.7.42 显示警告声明

[](<>)[](<>)

```
SHOW WARNINGS [LIMIT [offset,] row_count]
SHOW COUNT(*) WARNINGS
```

[`显示警告`](show-warnings.html)是一个诊断语句，显示有关在当前会话中执行语句所产生的条件（错误、警告和注释）的信息。为 DML 语句生成警告，例如[`插入`](insert.html),[`更新`](update.html)， 和[`加载数据`](load-data.html)以及 DDL 语句，例如[`创建表`](create-table.html)和[`更改表`](alter-table.html).

这`限制`子句的语法与[`选择`](select.html)陈述。看[第 13.2.10 节，“SELECT 语句”](select.html).

[`显示警告`](show-warnings.html)也用于以下[`解释`](explain.html), 显示由生成的扩展信息[`解释`](explain.html).看[第 8.8.3 节，“扩展 EXPLAIN 输出格式”](explain-extended.html).

[`显示警告`](show-warnings.html)显示有关在当前会话中执行最近的非诊断语句所产生的条件的信息。如果最近的语句在解析过程中导致错误，[`显示警告`](show-warnings.html)显示结果条件，无论语句类型如何（诊断或非诊断）。

这[`显示计数（*）警告`](show-warnings.html)诊断语句显示错误、警告和注释的总数。您也可以从[`警告计数`](server-system-variables.html#sysvar_warning_count)系统变量：

```
SHOW COUNT(*) WARNINGS;
SELECT @@warning_count;
```

这些语句的不同之处在于第一个是不清除消息列表的诊断语句。第二，因为它是[`选择`](select.html)语句被认为是非诊断性的，并且确实清除了消息列表。

相关的诊断声明，[`显示错误`](show-errors.html)，仅显示错误情况（不包括警告和注释），并且[`显示计数 (*) 错误`](show-warnings.html)语句显示错误总数。看[第 13.7.7.17 节，“显示错误语句”](show-errors.html).[`得到诊断`](get-diagnostics.html)可用于检查个别条件的信息。看[第 13.6.7.3 节，“获取诊断声明”](get-diagnostics.html).

这是一个简单的例子，显示了数据转换警告[`插入`](insert.html).该示例假定禁用严格 SQL 模式。启用严格模式后，警告将变为错误并终止[`插入`](insert.html).

```
mysql> CREATE TABLE t1 (a TINYINT NOT NULL, b CHAR(4));
Query OK, 0 rows affected (0.05 sec)

mysql> INSERT INTO t1 VALUES(10,'mysql'), (NULL,'test'), (300,'xyz');
Query OK, 3 rows affected, 3 warnings (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 3

mysql> SHOW WARNINGS\G
*************************** 1. row ***************************
  Level: Warning
   Code: 1265
Message: Data truncated for column 'b' at row 1
*************************** 2. row ***************************
  Level: Warning
   Code: 1048
Message: Column 'a' cannot be null
*************************** 3. row ***************************
  Level: Warning
   Code: 1264
Message: Out of range value for column 'a' at row 3
3 rows in set (0.00 sec)
```

这[`最大错误计数`](server-system-variables.html#sysvar_max_error_count)系统变量控制服务器为其存储信息的错误、​​警告和注释消息的最大数量，从而控制服务器存储信息的消息数量。[`显示警告`](show-warnings.html)显示。要更改服务器可以存储的消息数量，请更改[`最大错误计数`](server-system-variables.html#sysvar_max_error_count).

[`最大错误计数`](server-system-variables.html#sysvar_max_error_count)只控制存储多少消息，而不是计数多少。的价值[`警告计数`](server-system-variables.html#sysvar_warning_count)不受限制[`最大错误计数`](server-system-variables.html#sysvar_max_error_count), 即使生成的消息数量超过[`最大错误计数`](server-system-variables.html#sysvar_max_error_count).下面的示例演示了这一点。这[`更改表`](alter-table.html)语句产生三个警告消息（示例中禁用了严格的 SQL 模式，以防止在单个转换问题后发生错误）。只存储和显示一条消息，因为[`最大错误计数`](server-system-variables.html#sysvar_max_error_count)已设置为 1，但所有三个都被计算在内（如[`警告计数`](server-system-variables.html#sysvar_warning_count)):

```
mysql> SHOW VARIABLES LIKE 'max_error_count';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_error_count | 1024  |
+-----------------+-------+
1 row in set (0.00 sec)

mysql> SET max_error_count=1, sql_mode = '';
Query OK, 0 rows affected (0.00 sec)

mysql> ALTER TABLE t1 MODIFY b CHAR;
Query OK, 3 rows affected, 3 warnings (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 3

mysql> SHOW WARNINGS;
+---------+------+----------------------------------------+
| Level   | Code | Message                                |
+---------+------+----------------------------------------+
| Warning | 1263 | Data truncated for column 'b' at row 1 |
+---------+------+----------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT @@warning_count;
+-----------------+
| @@warning_count |
+-----------------+
|               3 |
+-----------------+
1 row in set (0.01 sec)
```

要禁用消息存储，请设置[`最大错误计数`](server-system-variables.html#sysvar_max_error_count)为 0。在这种情况下，警告计数[`仍然指示发生了多少警告，但消息未存储且无法显示。`](server-system-variables.html#sysvar_warning_count)这

sql_notes[`系统变量控制注释消息是否递增`](server-system-variables.html#sysvar_sql_notes)警告计数[`以及服务器是否存储它们。`](server-system-variables.html#sysvar_warning_count)默认，[`sql_notes`](server-system-variables.html#sysvar_sql_notes)为 1，但如果设置为 0，则音符不会增加[`警告计数`](server-system-variables.html#sysvar_warning_count)并且服务器不存储它们：

```
mysql> SET sql_notes = 1;
mysql> DROP TABLE IF EXISTS test.no_such_table;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> SHOW WARNINGS;
+-------+------+------------------------------------+
| Level | Code | Message                            |
+-------+------+------------------------------------+
| Note  | 1051 | Unknown table 'test.no_such_table' |
+-------+------+------------------------------------+
1 row in set (0.00 sec)

mysql> SET sql_notes = 0;
mysql> DROP TABLE IF EXISTS test.no_such_table;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW WARNINGS;
Empty set (0.00 sec)
```

MySQL 服务器向每个客户端发送一个计数，指示该客户端执行的最新语句产生的错误、警告和注释的总数。从 C API 中，可以通过调用获取该值[`mysql_warning_count()`](https://dev.mysql.com/doc/c-api/8.0/en/mysql-warning-count.html).看[mysql\_警告\_数数（）](https://dev.mysql.com/doc/c-api/8.0/en/mysql-warning-count.html).

在里面[**mysql**](mysql.html)客户端，您可以使用`警告`和`预警`命令，分别，或其快捷方式，`\W`和`\w`（看[第 4.5.1.2 节，“mysql 客户端命令”](mysql-commands.html)）。例如：

```
mysql> \W
Show warnings enabled.
mysql> SELECT 1/0;
+------+
| 1/0  |
+------+
| NULL |
+------+
1 row in set, 1 warning (0.03 sec)

Warning (Code 1365): Division by 0
mysql> \w
Show warnings disabled.
```
