MySQL 5.7创建表时date字段默认值无效错误求助
解决MySQL 5.7中DATE字段默认值无效的错误
你碰到的Invalid default value for 'date'错误,核心原因是MySQL 5.7默认启用了严格SQL模式,而DATE类型的默认值不能设为空字符串''——空字符串并不是合法的日期值,严格模式下会直接抛出错误。另外你的原建表语句里PRIMARY KEY (id),后面多了个逗号,虽然部分场景下不会报错,但最好也去掉避免潜在问题。
具体修复方案:
这里有几种可行的解决方法,你可以根据业务需求选择:
方法1:设置合法的默认日期值
如果业务允许给date字段设置一个有效默认日期,比如'0000-00-00'或者当前日期,修改建表语句即可:
- 使用
'0000-00-00'作为默认值(大部分场景下适用,若你的SQL模式限制零日期,可能需要临时调整,但5.7默认一般允许):
CREATE TABLE IF NOT EXISTS `#__websitemanager_magazine` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.', `date` DATE NOT NULL DEFAULT '0000-00-00', `magazine_file` TEXT NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
- 使用当前日期作为默认值(适合需要自动记录创建日期的场景):
CREATE TABLE IF NOT EXISTS `#__websitemanager_magazine` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.', `date` DATE NOT NULL DEFAULT CURRENT_DATE, `magazine_file` TEXT NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
方法2:允许date字段为NULL
如果业务场景中date字段可以为空,你可以将字段定义改为允许NULL,这样就不需要强制设置默认值:
CREATE TABLE IF NOT EXISTS `#__websitemanager_magazine` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.', `date` DATE DEFAULT NULL, `magazine_file` TEXT NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
注意这里要去掉NOT NULL,否则严格模式下允许NULL的字段同时设NOT NULL会报错。
方法3:临时关闭严格SQL模式(不推荐长期使用)
如果你只是临时需要绕过这个限制,可以在执行建表语句前先关闭严格模式,执行完成后再恢复:
SET sql_mode = ''; -- 临时关闭严格模式 CREATE TABLE IF NOT EXISTS `#__websitemanager_magazine` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.', `date` DATE NOT NULL DEFAULT '', `magazine_file` TEXT NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8; SET sql_mode = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION'; -- 恢复默认严格模式
但这种方法不推荐长期使用,因为严格模式能帮你规避很多数据一致性问题。
内容的提问来源于stack exchange,提问作者user1616338
相关产品推荐
相关产品推荐

