解決設定WordPress wp_posts資料表DB engine為MyISAM時的錯誤

如何發生錯誤

之前有個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

相關文章