+-
mysql在插入时显示警告而不是错误,并且没有为设置为非null的列赋值 – 字段没有默认值
6.24在 Windows 7上运行(来自XAMPP v3.2.1).
我觉得很奇怪,当我有一个带有Allow NULL的列的表设置为NOT NULL并且没有默认值时
我尝试插入一行而不指定列值我收到警告而不是错误.

我很确定在以前的版本MySQL中不允许这样生成和错误并且实际上没有插入行.这是配置问题吗?那是怎么回事?
enter image description here

enter image description here

enter image description here

最佳答案
我能够在我的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的列赋值 – 字段没有默认值 - 乐贴网