MySQL - 字段 <myfield> 没有默认值
MySQL - Field <myfield> doesn't have a default value
我知道某个字段没有默认值。
我一直在使用 MySQL 5.5.28,只要我在该字段上未指定值的情况下插入,它就可以正常工作。该字段为 TINYINT,默认情况下,在创建 table 期间未指定任何值且未声明默认值时,将在 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 的结果:
我的字段1 | 我的字段2
0 |迈克尔
有警告:1 行受影响,1 条警告:1364 字段 'MyField1' 没有默认值
MySQL 5.5.30 的结果:
数据没有变化并抛出错误
错误代码:1364。字段 'MyField1' 没有默认值
INSERT INTO MyTable(MyField1, MyField2)VALUES(0, 'MICHAEL');
上面的查询仍然有效。
在第一台服务器中未启用严格 sql 模式,而在第二台服务器中启用。阅读更多关于严格模式 in the mysql documentation.
具体来说:
If strict mode is not in effect, MySQL inserts adjusted values for invalid or missing values and produces warnings (see Section 13.7.5.40, “SHOW WARNINGS Syntax”). In strict mode, you can produce this behavior by using INSERT IGNORE or UPDATE IGNORE.
我知道某个字段没有默认值。
我一直在使用 MySQL 5.5.28,只要我在该字段上未指定值的情况下插入,它就可以正常工作。该字段为 TINYINT,默认情况下,在创建 table 期间未指定任何值且未声明默认值时,将在 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 的结果:
我的字段1 | 我的字段2
0 |迈克尔
有警告:1 行受影响,1 条警告:1364 字段 'MyField1' 没有默认值
MySQL 5.5.30 的结果:
数据没有变化并抛出错误
错误代码:1364。字段 'MyField1' 没有默认值
INSERT INTO MyTable(MyField1, MyField2)VALUES(0, 'MICHAEL');
上面的查询仍然有效。
在第一台服务器中未启用严格 sql 模式,而在第二台服务器中启用。阅读更多关于严格模式 in the mysql documentation.
具体来说:
If strict mode is not in effect, MySQL inserts adjusted values for invalid or missing values and produces warnings (see Section 13.7.5.40, “SHOW WARNINGS Syntax”). In strict mode, you can produce this behavior by using INSERT IGNORE or UPDATE IGNORE.