在 mysql8 中,为什么 DATE DEFAULT CURRENT_DATE 需要在 CURRENT_DATE 周围加上括号?

han*_*rik 3 mysql sql default create-table

从 mysql8 开始,这是合法的:

CREATE TABLE t (d DATETIME DEFAULT CURRENT_TIMESTAMP);
Run Code Online (Sandbox Code Playgroud)

这是合法的:

CREATE TABLE t (d DATE DEFAULT (CURRENT_DATE));
Run Code Online (Sandbox Code Playgroud)

那么为什么这是非法的呢?

CREATE TABLE t (d DATE DEFAULT CURRENT_DATE);
Run Code Online (Sandbox Code Playgroud)

导致

查询错误 (1064):第 1 行“CURRENT_DATE)”附近存在语法错误

小智 7

请参阅此了解更多信息

这很可能是您在问题中提到的内容:

DEFAULT 子句中指定的默认值可以是文字常量或表达式。除一处例外外,请将表达式默认值括在括号内,以将它们与文字常量默认值区分开来。

[...]

例外情况是,对于 TIMESTAMP 和 DATETIME 列,您可以将 CURRENT_TIMESTAMP 函数指定为默认函数,而不用括号括起来。