如何發生錯誤
之前有個Wordpress相關文章外掛叫YARPP (Yet Another Related Posts Plugin),可以透過文章類別、標題、內文來計算相關度高的文章,不過2018年底停止維護了,不過有好心人想接手維護,目前放在GitHub
https://github.com/mihdan/mihdan-yarpp
https://github.com/mnelson4/not-another-related-posts-plugin
這個外掛只支援db engine MyISAM做全文索引,不過從MySQL 5.5以後預設是InnoDB,所以現在使用這個外掛會跟你說需要請你執行以下MySQL指令把wp_posts這個資料表改成MyISAM
ALTER TABLE `wp_posts` ENGINE = MyISAM;
但出現了個錯誤
ERROR 1067 (42000): Invalid default value for ‘post_date’
快速google後找到問題點,因為post_date預設值是0000-00-00 00:00:00,而預設sql_modes參數有 NO_ZERO_IN_DATE, NO_ZERO_DATE,所以就回傳無效的預設值這個錯誤囉。
用以下指令檢查一下
SHOW variables like 'sql_mode' ;
的確有NO_ZERO_IN_DATE, NO_ZERO_DATE!
解決方法
把sql_mode的值裡面拿掉NO_ZERO_IN_DATE, NO_ZERO_DATE這兩個字串
修改 /etc/mysql/mysql.conf.d/mysqld.cnf (Ubuntu18.04, MySQL 5.7.25)
[mysqld] sql_mode= "........."
上面在雙引號內加入去掉NO_ZERO_IN_DATE, NO_ZERO_DATE的剩下設定值。
$ sudo service mysql restart
存檔後重啟MySQL就可以再次執行MySQL指令
ALTER TABLE `wp_posts` ENGINE = MyISAM;
成功就可以使用YARPP的功能囉
References
Error 1067 42000 invalid default value for created-at
Setting global sql mode in mysql