☰
Current Page
Main Menu
Home
Home
Editing
创建表失败Invliad-default-vlalue-for_update_date
Edit
Preview
h1
h2
h3
default
Set your preferred keybinding
default
vim
emacs
markdown
Set this page's format to
AsciiDoc
Creole
Markdown
MediaWiki
Org-mode
Plain Text
RDoc
Textile
Rendering unavailable for
BibTeX
Pod
reStructuredText
Help 1
Help 1
Help 1
Help 2
Help 3
Help 4
Help 5
Help 6
Help 7
Help 8
Autosaved text is available. Click the button to restore it.
Restore Text
# 出错现象 数据库使用的是 MySQL。 引擎启动的时候会自动进行建表。创建表的时候,日志出现错误信息 1067 - Invliad default vlalue for `update_date`。 # 问题排查 使用数据库客户端连接数据库,查询数据库 sql_mode ```sql select @@sql_mode ``` 查询结果中包含 NO_ZERO_IN_DATE、NO_ZERO_DATE > STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION 查询变量 ```sql show variables like 'explicit_defaults_for_timestamp'; ``` 查询结果如下 value 为 OFF > explicit_defaults_for_timestamp OFF # 问题简单描述 由于 sql_mode 含有 NO_ZERO_IN_DATE、NO_ZERO_DATE,就是日期和时间类型的字段,不能包含零时间,例如'0000-00-00 00:00:00' explicit_defaults_for_timestamp 为 OFF,会导致建表语句中,如果有多个 timestamp 字段,并且没有显式地指定为 NULL 或者默认值。MySQL 就会自动给第一个字段之后的字段,加上 DEFAULT '0000-00-00 00:00:0',这跟 NO_ZERO_DATE 是违背的,就会提示最开始的错误。 例如以下建表语句,在 explicit_defaults_for_timestamp 为 OFF 时报错。 ```sql CREATE TABLE test( x int(11) NOT NULL AUTO_INCREMENT, y timestamp, z timestamp, w timestamp, PRIMARY KEY (x) ) ENGINE=InnoDB; ``` *注意:从 MySQL 8.0.2 开始,explicit_defaults_for_timestamp 默认为 ON。现在部署脚本,安装的 MySQL 版本是 8.0.0。* # 解决方案 修改 explicit_defaults_for_timestamp 为 ON 在 Linux 系统上,MySQL 的配置文件通常位于 /etc/my.cnf 或 /etc/mysql/my.cnf;在 Windows 系统上,通常位于 C:\Program Files\MySQL\MySQL Server X.X\my.ini。 找到配置文件后,使用文本编辑器打开,并找到 [mysqld] 部分。在该部分添加或修改以下行: explicit_defaults_for_timestamp = ON # 参考资料 1. [https://cloud.baidu.com/doc/RDS/s/Ejy5gwvug](https://cloud.baidu.com/doc/RDS/s/Ejy5gwvug) 2. [https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_explicit_defaults_for_timestamp](https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_explicit_defaults_for_timestamp)
Uploading file...
Sidebar
[[_TOC_]]
Edit message:
Cancel