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

MySQL Workbench中DATE字段设CURRENT_DATE默认值报错求助

解决MySQL DATE字段默认值语法错误问题

问题原因

你遇到的ERROR 1064语法错误,核心是MySQL版本对DATE类型默认值的语法限制:

  • MySQL 5.7.4之前,DATE类型不允许用函数作为默认值,只能指定常量;
  • MySQL 5.7.4至8.0之间,允许用CURRENT_DATE(不带括号)或CURDATE()作为DATE字段的默认值,但CURRENT_DATE()(带括号)的写法不被支持;
  • MySQL 8.0及以上,CURRENT_DATE()、CURRENT_DATE、CURDATE()三种写法都可以正常使用。

解决方案

方案1:适配MySQL 5.7.4+版本

修改默认值的写法,将CURRENT_DATE()改为CURRENT_DATE(不带括号)或CURDATE(),示例语句:

CREATE TABLE xyz.order (
    id INT NOT NULL,
    o_no INT NULL,
    o_date DATE NULL DEFAULT CURRENT_DATE,
    PRIMARY KEY (id)
);

或者使用CURDATE():

CREATE TABLE xyz.order (
    id INT NOT NULL,
    o_no INT NULL,
    o_date DATE NULL DEFAULT CURDATE(),
    PRIMARY KEY (id)
);

方案2:适配MySQL 5.7.4以下版本

如果你的MySQL版本过低,无法直接用函数作为DATE默认值,可通过触发器实现自动设置默认日期:

  1. 先创建不带默认值的表:
CREATE TABLE xyz.order (
    id INT NOT NULL,
    o_no INT NULL,
    o_date DATE NULL,
    PRIMARY KEY (id)
);
  1. 创建触发器,在插入数据时自动为o_date赋值(仅当字段为NULL时):
DELIMITER //
CREATE TRIGGER set_default_order_date
BEFORE INSERT ON xyz.order
FOR EACH ROW
BEGIN
    IF NEW.o_date IS NULL THEN
        SET NEW.o_date = CURDATE();
    END IF;
END //
DELIMITER ;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 07:15:11