栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为DATE或DATETIME设置默认值时,MySQL错误

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为DATE或DATETIME设置默认值时,MySQL错误

错误是由于sql模式所致,根据最新的MYSQL 5.7文档,sql模式可以是严格模式

MySQL文档5.7说:

严格模式影响服务器是否允许将“ 0000-00-00”作为有效日期:如果未启用严格模式,则允许“
0000-00-00”,并且插入不会产生警告。如果启用了严格模式,则除非也给出了IGNORE,否则不允许使用“
0000-00-00”,并且插入会产生错误。对于INSERT IGNORE和UPDATE IGNORE,允许使用“
0000-00-00”,并且插入会产生警告。

检查MYSQL模式

SELECT @@GLOBAL.sql_mode global, @@SESSION.sql_mode session

禁用STRICT_TRANS_TABLES模式

但是,要允许格式,

0000-00-00 00:00:00
您必须在mysql配置文件中或通过命令禁用STRICT_TRANS_TABLES模式

通过命令

SET sql_mode = '';

要么

SET GLOBAL sql_mode = '';

使用关键字

GLOBAL
需要超级特权,并且会影响从那时起所有客户端连接的操作

如果上述方法不起作用,则转到

/etc/mysql/my.cnf
(按照ubuntu)并注释掉
STRICT_TRANS_TABLES

另外,如果你想永久设置在服务器启动时的SQL模式,然后包括

SETsql_mode=''
my.cnf
Linux或MacOS的。对于Windows,必须在
my.ini
文件中完成。

注意

但是,默认情况下,MYSQL 5.6中未启用严格模式。因此,它不会产生根据MYSQL
6文档所述的错误

MySQL允许您将“
0000-00-00”的“零”值存储为“虚拟日期”。在某些情况下,这比使用NULL值更方便,并且使用较少的数据和索引空间。要禁止使用“
0000-00-00”,请启用NO_ZERO_DATE SQL模式。

更新

关于@ Dylan-Su所说的bug问题:

我不认为这是MYSQL随时间演变的错误,因为随着产品的进一步改进而发生了一些变化。

但是我还有另一个有关该

NOW()
功能的错误报告

日期时间字段不接受默认的NOW()

另一个有用的注释
[请参阅TIMESTAMP和DATETIME的自动初始化和更新 ]

从MySQL
5.6.5开始,TIMESTAMP和DATETIME列可以自动初始化并更新为当前日期和时间(即当前时间戳)。在5.6.5之前的版本中,这仅适用于TIMESTAMP,并且每个表最多包含一个TIMESTAMP列。以下说明首先介绍了MySQL
5.6.5及更高版本的自动初始化和更新,然后介绍了5.6.5之前版本的区别。

关于NO_ZERO_DATE的更新

从5.7.4版本的MySQL开始,不建议使用此模式。对于以前的版本,您必须注释掉配置文件中的相应行。请参阅NO_ZERO_DATE的MySQL
5.7文档



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/408125.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号