为什么我可以将null插入到varchar not null的mysql字段中

时间:2017-09-08 09:20:40

标签: mysql

我已经通过

在mysql中创建了一个表
create table test (id int primary key not null auto_increment, vs varchar(255) not null);

运行时

insert into test (vs) values (null);

它会抛出错误:

ERROR 1048 (23000): Column 'vs' cannot be null

但是当我尝试按

插入两行时
insert into test (vs) values (null),(null);

它有效,结果是:

mysql> select * from test;
+----+----+
| id | vs |
+----+----+
|  1 |    |
|  2 |    |
+----+----+

字段vs不可为空,我想知道它是否是一个功能。

1 个答案:

答案 0 :(得分:5)

这既不是错误也不是功能。这就是它在这种情况下的工作原理。 MySQL documentation - Constraints on Invalid Data中记录了此行为。

  

如果尝试将NULL存储到不带NULL值的列中,则单行INSERT语句会出现错误对于多行INSERT语句或INSERT INTO ... SELECT语句,MySQL Server存储列数据类型的隐式默认值。通常,对于数字类型,空字符串为0( '')表示字符串类型,“0”表示日期和时间类型。第11.7节“数据类型默认值”中讨论了隐式默认值。

当您关闭严格模式时会发生这种情况。