mysql5.7 版本中 timestamp 不能為零日期 以及sql_mode合理設定
阿新 • • 發佈:2018-11-10
---恢復內容開始---
摘要: mysql5.7版本相比較之前的版本有很多的特性的增加以及預設配置的改變,在使用中難免會遇到與之前的使用習慣或者專案需求不符的情況。就需要調整相應的變數的值,比如sql_mode的值最近在做一個專案的遷移工作,由於開發環境所使用的都是最新的軟體版本(mysql5.7)。遷移時難免會遇到一些相容性的“坑”,比如將oracle中的資料遷移到mysql中的時間問題:
設計到類似這樣的表結構:
CREATE TABLE `cm_admin_user_group` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL DEFAULT '0' COMMENT 'User ID', `group_id` int(11) NOT NULL DEFAULT '0' COMMENT 'Group ID', `is_leader` int(1) NOT NULL DEFAULT '0' COMMENT '是否組長;0:不是,1:是', `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間', `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '加入時間', PRIMARY KEY (`id`), UNIQUE KEY `uidx` (`user_id`,`group_id`) ) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;
1 |
<code class=
"hljs sql"
><span class=
"hljs-keyword"
><span class=
"hljs-keyword"
> </span></span></code>
|
其中的 updated_at 和 created_at 的型別是 timestamp 並且會預設零日期(業務設計需求),但是在mysql5.7的版本中,預設是不允許設定為零日期的。為此,需要更改mysql的配置檔案。
首先,檢視當前的mysql中的 sql_mode變數的值:
#select @@sql_mode; mysql> select @@sql_mode; +----------------------------------------------------------------------------------------------------------------------------------------------------------------+ | @@sql_mode | +----------------------------------------------------------------------------------------------------------------------------------------------------------------+ | PIPES_AS_CONCAT,ANSI_QUOTES,ONLY_FULL_GROUP_BY,NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | +----------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
1 |
<code class=
"hljs lua"
> </code>
|
預設會有:NO_ZERO_IN_DATE 和 NO_ZERO_DATE 兩個值,限制欄位不能為零日期
更改配置檔案,去掉這兩個值即可。
vim /etc/my.cnf
1 |
<code class=
"hljs nginx"
><span class=
"hljs-attribute"
><span class=
"hljs-attribute"
> <
/span
><
/span
><
/code
>
|
增加一行:
sql_mode=NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,PIPES_AS_CONCAT,ANSI_QUOTES
1 |
<code class=
"hljs ini"
><span class=
"hljs-attr"
><span class=
"hljs-attr"
> </span></span></code>
|
其他的則根據場景和業務自行更改。
轉:
https://my.oschina.net/u/192792/blog/652627