具有非空空日期字段的 Mysql INSERT 查询。是否可以?

标签 mysql date upgrade

我刚刚将安装从 MySQL 5.0.5 升级到 MySQL 5.6

使用 MySQL 5.0,我可以像这样插入查询:

INSERT INTO mytable (myid, mydate, myname) VALUES (NULL, '', 'John');

但显然不再是了。现在,如果我尝试,它会给我这个错误:

#1292 - Incorrect date value: '' for column 'mydate' at row 1

顺便说一下,mydate 定义为 mydate date NOT NULL,

如果我将查询更改为...

INSERT INTO mytable (myid, mydate, myname) VALUES (NULL, '0000-00-00', 'John');

...或...

INSERT INTO mytable (myid, mydate, myname) VALUES (NULL, 0, 'John');

...比它成功。

此行为是否由 MySQL 中的某些设置控制?如果有的话,我在哪里可以找到它?或者我必须更改所有查询吗?有建议吗?

谢谢。

最佳答案

不言而喻,你做错了。如果您打算不存储任何内容,则该列应该可为空,并且当您应该使用 NULL 时,不应尝试插入空字符串。

但请考虑一下:

If strict mode is not in effect, MySQL inserts adjusted values for invalid or missing values and produces warnings.

但是当严格模式生效时...

For transactional tables, an error occurs for invalid or missing values in a data-change statement when either STRICT_ALL_TABLES or STRICT_TRANS_TABLES is enabled. The statement is aborted and rolled back

http://dev.mysql.com/doc/refman/5.6/en/sql-mode.html#sql-mode-strict

SELECT @@SQL_MODE; 应该显示您正在使用(至少)STRICT_TRANS_TABLES 运行。虽然这不是 5.6 中的内部默认设置,但它包含在默认的 5.6 配置文件中。如果您想要旧的行为,您需要将其删除并重新启动服务器。

...尽管您应该考虑让您的代码表现得更正确。

关于具有非空空日期字段的 Mysql INSERT 查询。是否可以?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33047431/

相关文章:

python - SQLAlchemy:如何使用 SQLAlchemy 更改 MySQL 服务器系统变量?

java - 我希望 RecyclerView 在滚动到结束时加载更多项目。我怎样才能得到这个?

javascript - 更改月份的两个日期之间的差异

ios - 如何在 iOS 中升级(而不是更新)应用程序?

testing - 从 Grails 2.0.3 升级到 2.2.1 : Tests Failing

php - 检查用户名可用性 php

javascript - JavaScript 中的日期间隔计算

java - 将时区更改为伦敦时的日期问题

python - 无法使用Windows PowerShell安装Jupyter Notebook,因为pip不会升级到20.1版

php - 更改二维数组以实现 Codeigniter 兼容性批量插入