mysql5.7 datetime 預設值0000-00-00 00:00:00出錯
實驗環境:MySQL 5.7.17
使用wordpress的表wp_posts
<code>mysql > </code><code>CREATE</code> <code>TABLE</code> <code>`wp_posts` (</code>
<code> </code><code>-> `ID` </code><code>bigint</code><code>(20) unsigned </code><code>NOT</code> <code>NULL</code> <code>AUTO_INCREMENT,</code>
<code> </code><code>-> `post_author` </code><code>bigint</code><code>(20) unsigned </code><code>NOT</code> <code>NULL</code> <code>DEFAULT</code> <code>'0'</code><code>,</code>
<code> </code><code>-> `post_date` datetime </code><code>NOT</code> <code>NULL</code> <code>DEFAULT</code> <code>'0000-00-00 00:00:00'</code><code>,</code>
<code> </code><code>-> `post_date_gmt` datetime </code><code>NOT</code> <code>NULL</code> <code>DEFAULT</code> <code>'0000-00-00 00:00:00'</code><code>,</code>
<code> </code><code>-> `post_content` longtext </code><code>NOT</code> <code>NULL</code><code>,</code>
<code> </code><code>-> `post_title` text </code><code>NOT</code> <code>NULL</code><code>,</code>
<code> </code><code>-> `post_excerpt` text </code><code>NOT</code> <code>NULL</code><code>,</code>
<code> </code><code>-> `post_status` </code><code>varchar</code><code>(20) </code><code>NOT</code> <code>NULL</code> <code>DEFAULT</code> <code>'publish'</code><code>,</code>
<code> </code><code>-> `comment_status` </code><code>varchar</code><code>(20) </code><code>NOT</code> <code>NULL</code> <code>DEFAULT</code> <code>'open'</code><code>,</code>
<code> </code><code>-> `ping_status` </code><code>varchar</code><code>(20) </code><code>NOT</code> <code>NULL</code> <code>DEFAULT</code> <code>'open'</code><code>,</code>
<code> </code><code>-> `post_password` </code><code>varchar</code><code>(20) </code><code>NOT</code> <code>NULL</code> <code>DEFAULT</code> <code>''</code><code>,</code>
<code> </code><code>-> `post_name` </code><code>varchar</code><code>(200) </code><code>NOT</code> <code>NULL</code> <code>DEFAULT</code> <code>''</code><code>,</code>
<code> </code><code>-> `to_ping` text </code><code>NOT</code> <code>NULL</code><code>,</code>
<code> </code><code>-> `pinged` text </code><code>NOT</code> <code>NULL</code><code>,</code>
<code> </code><code>-> `post_modified` datetime </code><code>NOT</code> <code>NULL</code> <code>DEFAULT</code> <code>'0000-00-00 00:00:00'</code><code>,</code>
<code> </code><code>-> `post_modified_gmt` datetime </code><code>NOT</code> <code>NULL</code> <code>DEFAULT</code> <code>'0000-00-00 00:00:00'</code><code>,</code>
<code> </code><code>-> `post_content_filtered` longtext </code><code>NOT</code> <code>NULL</code><code>,</code>
<code> </code><code>-> `post_parent` </code><code>bigint</code><code>(20) unsigned </code><code>NOT</code> <code>NULL</code> <code>DEFAULT</code> <code>'0'</code><code>,</code>
<code> </code><code>-> `guid` </code><code>varchar</code><code>(255) </code><code>NOT</code> <code>NULL</code> <code>DEFAULT</code> <code>''</code><code>,</code>
<code> </code><code>-> `menu_order` </code><code>int</code><code>(11) </code><code>NOT</code> <code>NULL</code> <code>DEFAULT</code> <code>'0'</code><code>,</code>
<code> </code><code>-> `post_type` </code><code>varchar</code><code>(20) </code><code>NOT</code> <code>NULL</code> <code>DEFAULT</code> <code>'post'</code><code>,</code>
<code> </code><code>-> `post_mime_type` </code><code>varchar</code><code>(100) </code><code>NOT</code> <code>NULL</code> <code>DEFAULT</code> <code>''</code><code>,</code>
<code> </code><code>-> `comment_count` </code><code>bigint</code><code>(20) </code><code>NOT</code> <code>NULL</code> <code>DEFAULT</code> <code>'0'</code><code>,</code>
<code> </code><code>-> </code><code>PRIMARY</code> <code>KEY</code> <code>(`ID`),</code>
<code> </code><code>-> </code><code>KEY</code> <code>`post_name` (`post_name`(191)),</code>
<code> </code><code>-> </code><code>KEY</code> <code>`type_status_date` (`post_type`,`post_status`,`post_date`,`ID`),</code>
<code> </code><code>-> </code><code>KEY</code> <code>`post_parent` (`post_parent`),</code>
<code> </code><code>-> </code><code>KEY</code> <code>`post_author` (`post_author`)</code>
<code> </code><code>-> ) ENGINE=innodb AUTO_INCREMENT=536 </code><code>DEFAULT</code> <code>CHARSET=utf8;</code>
<code>ERROR 1067 (42000): Invalid </code><code>default</code> <code>value </code><code>for</code> <code>'post_date'</code>
出現以上問題:是因為mysql5.7版本後,sql_mode參數被設定了NO_ZERO_IN_DATE,NO_ZERO_DATE
<code>mysql > show variables </code><code>like</code> <code>'sql_mode'</code><code>;</code>
<code>+</code><code>---------------+-------------------------------------------------------------------------------------------------------------------------------------------+</code>
<code>| Variable_name | Value |</code>
<code>| sql_mode | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |</code>
<code>1 row </code><code>in</code> <code>set</code> <code>(0.01 sec)</code>
解決方法:
方法一:臨時修改方法
<code>mysql> </code><code>set</code> <code>global</code> <code>sql_mode=</code><code>'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'</code> <code>;</code>
<code>mysql> </code><code>set</code> <code>session sql_mode=</code><code>'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'</code> <code>;</code>
方法二:永久修改方法,需要重新開機mysql服務:修改mysql的配置檔案my.cnf,添加以下參數
<code> </code><code>sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION //實際是去除NO_ZERO_IN_DATE,NO_ZERO_DATE</code>
方法三:修改datetime的預設值
本文轉自 corasql 51CTO部落格,原文連結:http://blog.51cto.com/corasql/1913178,如需轉載請自行聯系原作者