为什么第一个INSERT要通过table2。请注意,table2.col_1不为NULL。它不会为col_1插入NULL,而是神秘地将NULL值转换为空字符串。我正在使用MySQL 5.5.28版本。谢谢
mysql> DROP TABLE IF EXISTS table1, table2; Query OK, 0 rows affected (0.01 sec) mysql> CREATE TABLE IF NOT EXISTS table1 ( -> id INT UNSIGNED NOT NULL AUTO_INCREMENT , -> col_1 VARCHAR(45) NOT NULL , -> col_2 VARCHAR(45) NOT NULL , -> PRIMARY KEY (`id`)) -> ENGINE = InnoDB; Query OK, 0 rows affected (0.01 sec) mysql> CREATE TABLE table2 LIKE table1; Query OK, 0 rows affected (0.00 sec) mysql> INSERT INTO table1 (id, col_1, col_2) VALUES (NULL, "xxx","yyy"); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO table2 (id, col_1, col_2) SELECT NULL, NULL, col_2 FROM table1 WHERE id=1; Query OK, 1 row affected, 1 warning (0.00 sec) Records: 1 Duplicates: 0 Warnings: 1 mysql> SHOW WARNINGS; +---------+------+-------------------------------+ | Level | Code | Message | +---------+------+-------------------------------+ | Warning | 1048 | Column 'col_1' cannot be null | +---------+------+-------------------------------+ 1 row in set (0.00 sec) mysql> SELECT * FROM table2; +----+-------+-------+ | id | col_1 | col_2 | +----+-------+-------+ | 1 | | yyy | +----+-------+-------+ 1 row in set (0.00 sec) mysql> INSERT INTO table2 (id, col_1, col_2) VALUES( NULL, NULL, "zzz"); ERROR 1048 (23000): Column 'col_1' cannot be null mysql> SELECT * FROM table2; +----+-------+-------+ | id | col_1 | col_2 | +----+-------+-------+ | 1 | | yyy | +----+-------+-------+ 1 row in set (0.00 sec)
您已关闭MySQL的STRICT模式。打开它,您将得到一个错误。
否则,您可以通过以下方式使用PDO测试这些警告:http : //php.net/manual/en/pdo.errorinfo.php