You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL现有表添加列失败:#1067默认值无效问题求助

解决MySQL添加DATE列默认值无效的问题

错误原因

MySQL在5.6.5版本之前,DATE类型不支持将CURRENT_TIMESTAMP作为默认值;即使是5.6.5到8.0.12之间的版本,DATE类型也无法直接用CURRENT_TIMESTAMP设置默认值,仅能通过特定配置或触发器实现。

解决方案

方案1:改用DATETIME类型(兼容性最佳)

如果业务允许修改字段类型,直接改用DATETIME即可——该类型从MySQL 5.6.5开始就支持CURRENT_TIMESTAMP作为默认值:

ALTER TABLE users ADD exp_date DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP AFTER paidthru;

方案2:使用CURRENT_DATE作为默认值(MySQL 8.0.13+适用)

若必须保留DATE类型且你的MySQL版本≥8.0.13,可替换为CURRENT_DATE作为默认值:

ALTER TABLE users ADD exp_date DATE NOT NULL DEFAULT CURRENT_DATE AFTER paidthru;

方案3:用触发器实现默认值(低版本MySQL适用)

如果你的MySQL版本低于8.0.13且必须用DATE类型,通过触发器实现插入时自动填充当前日期:

  1. 先添加无默认值的列:
ALTER TABLE users ADD exp_date DATE NOT NULL AFTER paidthru;
  1. 创建插入触发器:
DELIMITER //
CREATE TRIGGER set_exp_date_default BEFORE INSERT ON users
FOR EACH ROW
BEGIN
    SET NEW.exp_date = CURDATE();
END //
DELIMITER ;

若需要支持更新时重置日期,可额外创建更新触发器。

检查MySQL版本

执行以下语句确认版本,匹配对应方案:

SELECT VERSION();

内容的提问来源于stack exchange,提问作者Kevin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 19:15:12