SHOW WARNINGS [LIMIT [offset
,]row_count
] SHOW COUNT(*) WARNINGS
SHOW WARNINGS
は、メッセージを作成した最後のステートメントから生じたエラー、警告、そしてノート
メッセージを表示、または、もしテーブルを利用した最後のステートメントが何のメッセージも作成しなければ、何も表示しません。関連ステートメントである
SHOW ERRORS
はエラーだけを表示します。詳しくは
項12.5.4.14. 「SHOW ERRORS
構文」 を参照してください。
テーブルを利用するそれぞれの新ステートメントに対して、メッセージのリストはリセットされます。
SHOW COUNT(*) WARNINGS
ステートメントはエラー、警告、そしてノートの総数を表示します。warning_count
変数からもこの数字を検索する事ができます。
SHOW COUNT(*) WARNINGS; SELECT @@warning_count;
もし max_error_count
システム変数が、全てのメッセージの格納ができないほど低く設定されると、warning_count
の値は SHOW WARNINGS
によって表示されるメッセージ数よりも大きくなります。このセクションの後の方で表示される例で、これがどのように起きるのか紹介しています。
LIMIT
条項は SELECT
ステートメントに対するのと同じ構文を持っています。詳しくは
項12.2.7. 「SELECT
構文」 を参照してください。
MySQL
サーバは、最後のステートメントから生じたエラー、警告、そしてノートの総数を送り返します。もし
C API を利用していれば、この値は
mysql_warning_count()
をコールする事で得る事ができます。詳しくは
項23.2.3.72. 「mysql_warning_count()
」
を参照してください。
警告は、LOAD DATA INFILE
や、また
DML
INSERT
、UPDATE
、CREATE
TABLE
、そして ALTER TABLE
のような DML
ステートメントなどのようなステートメントに対して作成されます。
次の 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
レベルの警告が記録されないようにできます。