MySQL中DATE类型设CURRENT_TIMESTAMP为默认值报错,求有效默认值
MySQL DATE类型列的有效默认值设置方案
你遇到的问题是因为MySQL默认配置下,DATE类型不支持直接用CURRENT_TIMESTAMP作为默认值(仅TIMESTAMP、DATETIME类型在MySQL 5.6.5及以上版本支持该默认值)。针对DATE类型,有以下几种有效设置方式:
1. 使用固定字面量日期值
直接指定格式为'YYYY-MM-DD'的固定字符串作为默认值:
ALTER TABLE `playlist_statistics_history` CHANGE COLUMN `date` `date` DATE DEFAULT '2020-01-01' NOT NULL;
2. 通过触发器实现动态当前日期默认值
如果需要默认值为当前日期,可借助触发器实现:
- 先调整列约束(保留NOTNULL,移除无效默认值):
ALTER TABLE `playlist_statistics_history` CHANGE COLUMN `date` `date` DATE NOT NULL;
- 创建BEFORE INSERT触发器,插入时自动填充当前日期:
DELIMITER // CREATE TRIGGER set_playlist_date_default BEFORE INSERT ON `playlist_statistics_history` FOR EACH ROW BEGIN IF NEW.`date` IS NULL THEN SET NEW.`date` = CURDATE(); END IF; END // DELIMITER ;
3. 升级MySQL版本后直接用动态默认值(MySQL 8.0.19+)
从MySQL 8.0.19版本开始,DATE类型支持直接设置CURRENT_DATE或CURRENT_TIMESTAMP作为默认值,执行语句如下:
ALTER TABLE `playlist_statistics_history` CHANGE COLUMN `date` `date` DATE DEFAULT CURRENT_DATE NOT NULL;
或者:
ALTER TABLE `playlist_statistics_history` CHANGE COLUMN `date` `date` DATE DEFAULT CURRENT_TIMESTAMP NOT NULL;
内容的提问来源于stack exchange,提问作者Čamo
相关产品推荐
相关产品推荐

