MySQL - Field <myfield>没有默认值

时间:2015-11-09 06:25:14

标签: mysql insert

我知道某个字段没有默认值。

我一直在使用MySQL 5.5.28,只要我插入而没有在该字段上指定值,它就能正常工作。该字段为TINYINT,默认情况下,在未创建表的过程中未指定任何值且未声明默认值的情况下,在INSERT语句期间将在该字段中插入值0。

但是,在更新到MySQL 5.5.30之后,查询不再起作用并返回字段没有默认值

我一直在查看更改日志,但没有发现任何关于Integer默认值发生变化的线索。

MySQL 5.5.29:http://dev.mysql.com/doc/relnotes/mysql/5.5/en/news-5-5-29.html#mysqld-5-5-29-feature

MySQL 5.5.30:http://dev.mysql.com/doc/relnotes/mysql/5.5/en/news-5-5-30.html

测试查询: MyTable 的字段 MyField1 MyField2

INSERT INTO MyTable(MyField2)VALUES('MICHAEL');

MySQL 5.5.28的结果:

MyField1 | MyField2
0 | MICHAEL

警告:1行受影响,1警告:1364字段'MyField1'没有默认值

MySQL 5.5.30的结果:

数据没有变化并引发错误
错误代码:1364。字段'MyField1'没有默认值

INSERT INTO MyTable(MyField1, MyField2)VALUES(0, 'MICHAEL');

上述查询可行。

1 个答案:

答案 0 :(得分:1)

在第一个服务器中没有启用严格的sql模式,而在第二个服务器中它是。阅读有关严格模式in the mysql documentation的更多信息。

具体做法是:

  

如果严格模式没有生效,MySQL会为无效或缺失值插入调整后的值并产生警告(参见第13.7.5.40节“显示警告语法”)。在严格模式下,您可以使用INSERT IGNORE或UPDATE IGNORE生成此行为。