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默认值,可通过触发器实现自动设置默认日期:
- 先创建不带默认值的表:
CREATE TABLE xyz.order ( id INT NOT NULL, o_no INT NULL, o_date DATE NULL, PRIMARY KEY (id) );
- 创建触发器,在插入数据时自动为
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
相关产品推荐
相关产品推荐

