+-

6.24在 Windows 7上运行(来自XAMPP v3.2.1).
我觉得很奇怪,当我有一个带有Allow NULL的列的表设置为NOT NULL并且没有默认值时
我尝试插入一行而不指定列值我收到警告而不是错误.
我觉得很奇怪,当我有一个带有Allow NULL的列的表设置为NOT NULL并且没有默认值时
我尝试插入一行而不指定列值我收到警告而不是错误.
我很确定在以前的版本MySQL中不允许这样生成和错误并且实际上没有插入行.这是配置问题吗?那是怎么回事?


最佳答案
我能够在我的Linux Slackware MySQL 5.5.27上重现你的MySQL行为:
mysql> CREATE TABLE `test` (
`field1` int(10) unsigned NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Query OK, 0 rows affected (0.07 sec)
mysql> INSERT INTO test VALUES ();
Query OK, 1 row affected, 1 warning (0.01 sec)
mysql> SHOW WARNINGS\G
*************************** 1. row ***************************
Level: Warning
Code: 1364
Message: Field 'field1' doesn't have a default value
1 row in set (0.00 sec)
mysql> SELECT * FROM test;
+--------+
| field1 |
+--------+
| 0 |
+--------+
1 row in set (0.00 sec)
这与sql_mode变量有关:
> @@ GLOBAL.sql_mode
> @@ SESSION.sql_mode
当您将其设置为“TRADITIONAL”时,它会开始出错:
mysql> SET @@SESSION.sql_mode='TRADITIONAL';
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO test VALUES ();
ERROR 1364 (HY000): Field 'field1' doesn't have a default value
Documentation about SQL modes
点击查看更多相关文章
转载注明原文:mysql在插入时显示警告而不是错误,并且没有为设置为非null的列赋值 – 字段没有默认值 - 乐贴网