CURRENT_DATE/CURDATE()在默认日期值上不起作用。
在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)作为默认日期值。
问题原因:
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月,第五个回答被确认为正确的解决方法。