当插入并且不向设置为非null的列提供值时,mysql显示警告而不是错误-字段没有默认值

Nat*_*ein 3 mysql

在Windows 7上运行6.24(来自XAMPP v3.2.1)。对我来说,这很奇怪,当我有一个表,其中的列的Allow NULL设置为NOT NULL且没有默认值,并且尝试插入一行而不指定该列值时,我得到的是警告而不是错误。

我很确定,在以前的版本中,MySQL不允许这样做,并且会产生错误,并且实际上并未插入行。这是配置问题吗?那应该是吗? 在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

use*_*035 6

我能够在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)
Run Code Online (Sandbox Code Playgroud)

这与sql_mode变量有关:

  1. @@ GLOBAL.sql_mode
  2. @@ 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
Run Code Online (Sandbox Code Playgroud)

有关SQL模式的文档