SET 和 SHOW语法(四)
14.5.3.21 SHOW WARNINGS
语法
SHOW WARNINGS [LIMIT [offset,] row_count] SHOW COUNT(*) WARNINGS
SHOW WARNINGS
显示了最后一个查询语句产生的错误、警告、提示等信息,如果它没有产生任何信息,则不显示任何信息。这个语句是在MySQL 4.1.0实现的。它的一个相关语句是 SHOW ERRORS
,不过它只显示错误信息,详情请看“14.5.3.10SHOW ERRORS
Syntax”。
随着执行语句的不同每次显示的信息都会产生变化。
SHOW COUNT(*) WARNINGS
语句显示了错误、警告、提示信息的总记录数。也可以通过取得变量 warning_count
的值来获得总错误记录数:
SHOW COUNT(*) WARNINGS; SELECT @@warning_count;
warning_count
的值可能会比 SHOW WARNINGS
显示的结果记录数大,因为系统变量 max_error_count
被设置的比较小,因此没有把所有的信息都存下来。本章节后面演示了发生这种情况的例子。
LIMIT
分句的用法和在 SELECT
语句一样。详情请看“14.1.7 SELECT
Syntax”。
MySQL服务器把最后一次查询中产生的错误、警告、提示信息总数返回了。如果使用C API,这个值可以通过调用 mysql_warning_count()
得到。详情请看“21.2.3.58 mysql_warning_count()
”。
注意,警告信息的框架在MySQL 4.1.0中增加了,在这个时候还有很多语句不产生警告信息。在4.1.1中,这种情况得到了改善,很多语句都产生了警告信息,例如:LOAD DATA INFILE
及 INSERT
, UPDATE
, CREATE TABLE
, 和 ALTER TABLE
等。
以下 DROP TABLE
语句就产生了一个提示信息:
mysql> DROP TABLE IF EXISTS no_such_table; mysql> SHOW WARNINGS; +-------+------+-------------------------------+ | Level | Code | Message | +-------+------+-------------------------------+ | Note | 1051 | Unknown table 'no_such_table' | +-------+------+-------------------------------+
以下是一个 CREATE TABLE
和 INSERT
语句产生的语法警告和转换警告信息:
mysql> CREATE TABLE t1 (a TINYINT NOT NULL, b CHAR(4)) TYPE=MyISAM default charset utf8 ; Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> SHOW WARNINGS\G *************************** 1. row *************************** Level: Warning Code: 1287 Message: 'TYPE=storage_engine' is deprecated, use 'ENGINE=storage_engine' instead 1 row in set (0.00 sec) mysql> INSERT INTO t1 VALUES(10,'mysql'),(NULL,'test'), -> (300,'open source'); Query OK, 3 rows affected, 4 warnings (0.01 sec) Records: 3 Duplicates: 0 Warnings: 4 mysql> SHOW WARNINGS\G *************************** 1. row *************************** Level: Warning Code: 1265 Message: Data truncated for column 'b' at row 1 *************************** 2. row *************************** Level: Warning Code: 1263 Message: Data truncated, NULL supplied to NOT NULL column 'a' at row 2 *************************** 3. row *************************** Level: Warning Code: 1264 Message: Data truncated, out of range for column 'a' at row 3 *************************** 4. row *************************** Level: Warning Code: 1265 Message: Data truncated for column 'b' at row 3 4 rows in set (0.00 sec)
错误、警告、提示信息的最大存储数量是由系统变量 max_error_count
控制的。它的默认值是64,通过修改 max_error_count
的值就可以改变最大存储数量。以下例子中,ALTER TABLE
语句产生了3个警告信息,不过只存储了1条,因为 max_error_count
的值为 1
:
mysql> SHOW VARIABLES LIKE 'max_error_count'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | max_error_count | 64 | +-----------------+-------+ 1 row in set (0.00 sec) mysql> SET max_error_count=1; 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> SELECT @@warning_count; +-----------------+ | @@warning_count | +-----------------+ | 3 | +-----------------+ 1 row in set (0.01 sec) mysql> SHOW WARNINGS; +---------+------+----------------------------------------+ | Level | Code | Message | +---------+------+----------------------------------------+ | Warning | 1263 | Data truncated for column 'b' at row 1 | +---------+------+----------------------------------------+ 1 row in set (0.00 sec)
想要禁止警告信息,只要将 max_error_count
设置为 0
。在这种情况下,warning_count
仍然是产生的警告信息总数,但不存储任何警告信息。
最近评论