SOFTELメモ Developer's blog

SQLSTATE[42000]: Syntax error or access violation: 1067 Invalid default value

2025/03/19 MySQL

問題

WordPressのテーブルを作ろうとしたのですが、エラーになります。

デフォルト値がよくないとか?

答え

sql_mode に NO_ZERO_DATE などが入っていると、datetime型のカラムのdefault value に 0000-00-00 00:00:00 を設定できず、Invalid default value のエラーになります。

自前のVPSなどであれば設定を変更できますが、共有レンタルサーバーなどでは設定変更ができないこともあります。

その場合は、そのSQLを実行するときだけ sql_mode を変更すると、CREATE TABLE はできます。

set sql_mode=''; 

CREATE TABLE `wp_comments` (
  `comment_ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `comment_post_ID` bigint(20) unsigned NOT NULL DEFAULT '0',
  `comment_author` tinytext   NOT NULL,
  `comment_author_email` varchar(100)   NOT NULL DEFAULT '',
  `comment_author_url` varchar(200)   NOT NULL DEFAULT '',
  `comment_author_IP` varchar(100)   NOT NULL DEFAULT '',
  `comment_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `comment_date_gmt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `comment_content` text   NOT NULL,
  `comment_karma` int(11) NOT NULL DEFAULT '0',
  `comment_approved` varchar(20)   NOT NULL DEFAULT '1',
  `comment_agent` varchar(255)   NOT NULL DEFAULT '',
  `comment_type` varchar(20)   NOT NULL DEFAULT 'comment',
  `comment_parent` bigint(20) unsigned NOT NULL DEFAULT '0',
  `user_id` bigint(20) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`comment_ID`),
  KEY `comment_post_ID` (`comment_post_ID`),
  KEY `comment_approved_date_gmt` (`comment_approved`,`comment_date_gmt`),
  KEY `comment_date_gmt` (`comment_date_gmt`),
  KEY `comment_parent` (`comment_parent`),
  KEY `comment_author_email` (`comment_author_email`(10))
) ;

メモ

MySQL8のsql_modeのデフォルト設定は以下。

sql_mode=ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

さくらのレンタルサーバーのMySQL8では以下となっていた。

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

関連するメモ

コメント