CURRENT_DATE/CURDATE()在默认日期值上不起作用。

20 浏览
0 Comments

CURRENT_DATE/CURDATE()在默认日期值上不起作用。

这是一个相当直接的问题,我认为这个语句应该可以运行,但实际上却不能。为什么会这样呢?

创建表INVOICE(
   INVOICEDATE DATE NOT NULL DEFAULT CURRENT_DATE
)

0
0 Comments

在MySQL 8.0.13版本中,可以使用(CURRENT_DATE)作为默认日期值。然而,有一些情况下可能会出现问题。

问题的原因是,如果在创建表时未指定日期值,默认值必须是一个字面值。如果使用了(CURRENT_DATE)作为默认日期值且未放置在括号中,则会出现问题。

解决方法是将(CURRENT_DATE)放置在括号中。这样可以确保默认日期值被正确识别。

下面是一个示例代码,展示了如何使用(CURRENT_DATE)作为默认日期值:

CREATE TABLE INVOICE(
    INVOICEDATE DATE DEFAULT (CURRENT_DATE)
)

需要注意的是,这个问题只存在于MySQL 8.0.13版本之前。在该版本之后,可以正常使用(CURRENT_DATE)作为默认日期值。

在MySQL 8.0.13版本之前,使用(CURRENT_DATE)作为默认日期值时可能会出现问题。原因是未将(CURRENT_DATE)放置在括号中。解决方法是将(CURRENT_DATE)放置在括号中。这个问题只存在于MySQL 8.0.13版本之前,该版本之后可以正常使用(CURRENT_DATE)作为默认日期值。

0
0 Comments

问题的原因是在MySQL 8中,将当前日期作为默认的DATE值时,使用curdate()无法正常工作。解决方法是在列旁边的“Default”字段中写入(curdate()),并且需要在开头和结尾处添加额外的括号。这个细节在官方文档中没有明确解释,并且对于第一次使用的用户来说需要进行一些尝试和错误。这个方法在MySQL 8.0.21中有效,虽然语法有点奇怪。这个问题已经被标记为正确答案。

0
0 Comments

问题原因:

MySQL的DEFAULT子句用于为列指定默认值,但默认值必须是一个常数,而不能是函数或表达式。这意味着无法将日期列的默认值设置为诸如NOW()或CURRENT_DATE之类的函数值,唯一的例外是可以将CURRENT_TIMESTAMP指定为TIMESTAMP列的默认值。

解决方法:

根据MySQL官方文档,可以使用CURRENT_TIMESTAMP作为TIMESTAMP列的默认值,但对于DATE列,无法使用CURRENT_DATE或CURDATE()作为默认值。因此,可以采用其他方法来解决这个问题。

一种解决方法是使用DATE_FORMAT函数来将CURRENT_DATE或CURDATE()的值格式化为所需的日期格式,并将其作为默认值。

另一种解决方法是使用TIMESTAMP列作为替代。可以创建一个TIMESTAMP列并将其默认值设置为CURRENT_TIMESTAMP。这样,在插入新行时,该列将自动设置为当前日期和时间。

此外,还有一种解决方法是切换到其他数据库系统,如PostgreSQL,该数据库允许在DEFAULT子句中使用函数或表达式作为默认值。

需要注意的是,根据评论中的回答,截至2021年10月,第五个回答被确认为正确的解决方法。

0