SHOW WARNINGS [LIMIT [offset
,]row_count
] SHOW COUNT(*) WARNINGS
SHOW WARNINGS
は、現在のセッションでメッセージを生成した最後のステートメントのために発生したエラー、警告、および注記メッセージを表示します。最後のステートメントがテーブルを使用し、メッセージを生成しなかった場合は、何も表示しません。(つまり、テーブルを使用するが、メッセージを生成しないステートメントによってメッセージリストがクリアーされます。)
テーブルを使用せず、メッセージを生成しないステートメントは、メッセージリストに影響を与えません。
警告は、INSERT
、UPDATE
、LOAD
DATA INFILE
などの DML
ステートメントのほか、CREATE
TABLE
や ALTER
TABLE
などの DDL
ステートメントに対して生成されます。
関連ステートメントである
SHOW ERRORS
はエラーだけを表示します。項8.5.5.18. 「SHOW ERRORS
構文」
を参照してください。
SHOW COUNT(*) WARNINGS
ステートメントはエラー、警告、そしてノートの総数を表示します。warning_count
変数からもこの数字を検索することができます。
SHOW COUNT(*) WARNINGS; SELECT @@warning_count;
もし
max_error_count
システム変数が、すべてのメッセージの格納ができないほど低く設定されると、warning_count
の値は SHOW
WARNINGS
によって表示されるメッセージ数よりも大きくなります。この節の後の方で表示される例で、これがどのように起きるのか紹介しています。
LIMIT
節は
SELECT
ステートメントに対するのと同じ構文を持っています。項8.2.8. 「SELECT
構文」
を参照してください。
MySQL
サーバーは、最後のステートメントから生じたエラー、警告、そしてノートの総数を送り返します。もし
C API を利用していれば、この値は
mysql_warning_count()
をコールすることで得ることができます。mysql_warning_count()
を参照してください。
次の 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;
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
つの警告メッセージを発生しますが、max_error_count
が 1 に設定されているため、そのうちの 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
はいくつの警告が起きたか指示しますが、どのメッセージも格納はされません。
sql_notes
セッション変数を 0
に設定して、記録されない
Note
レベルの警告を発生させることができます。