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

MySQL 8.0.32创建表时如何设置DATE类型字段默认值?

MySQL DATE字段设置默认当前日期失败的解决方案

问题重现

创建含DATE类型字段并指定CURRENT_DATE为默认值时触发语法错误:

mysql> CREATE TABLE expenses (expense_date DATE DEFAULT CURRENT_DATE);
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CURRENT_DATE)' at line 1

但TIMESTAMP类型执行相同逻辑却正常:

mysql> CREATE TABLE expenses (expense_timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP);
Query OK, 0 rows affected (0.02 sec)

单独调用CURRENT_DATE和CURRENT_TIMESTAMP函数均正常,使用的MySQL版本为8.0.32。

原因说明

这并非MySQL的bug,而是语法规则差异:

  • CURRENT_TIMESTAMP既是函数名,也是MySQL为TIMESTAMP/DATETIME类型预留的特殊默认值常量,因此可以不带括号使用。
  • 对于DATE类型,MySQL不支持直接使用CURRENT_DATE(不带括号)作为默认值,必须显式调用函数形式(带括号),或使用等效的日期函数。

正确解决方案

以下几种写法均可实现DATE字段默认值为当前日期:

  1. 使用带括号的CURRENT_DATE()函数
CREATE TABLE expenses (expense_date DATE DEFAULT CURRENT_DATE());
  1. 使用CURDATE()函数(与CURRENT_DATE()功能完全等效)
CREATE TABLE expenses (expense_date DATE DEFAULT CURDATE());
  1. 通过CAST将CURRENT_TIMESTAMP转换为DATE类型
CREATE TABLE expenses (expense_date DATE DEFAULT CAST(CURRENT_TIMESTAMP AS DATE));

验证效果

创建表后插入一条不指定expense_date的记录:

INSERT INTO expenses VALUES ();
SELECT expense_date FROM expenses;

查询结果会自动填充当前日期,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 22:42:18