如何在mysql 8.0.32中创建表时设置默认日期?

问题描述 投票:0回答:1

我正在尝试创建一个包含 DATE 类型列的表。我想将此字段的默认值设置为 CURRENT_DATE。 这并不像预期的那样工作,特别是与使用 TIMESTAMP 做同样的事情相比时。

问题是:

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

而使用时间戳做完全相同的事情很好:

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

current_date 和 current_timestamp 在表创建之外都按预期运行:

mysql> select current_date;
+--------------+
| current_date |
+--------------+
| 2023-03-20   |
+--------------+
1 row in set (0.00 sec)

mysql> select current_timestamp;
+---------------------+
| current_timestamp   |
+---------------------+
| 2023-03-20 01:33:27 |
+---------------------+
1 row in set (0.00 sec)
mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.32    |
+-----------+
1 row in set (0.00 sec)

我想这一定是MySQL 8.0.32的一个bug;我找不到将默认日期设置为当前日期的方法。

我正在尝试创建一个包含 DATE 列的表并将默认值设置为 current_date,但这不起作用。

我也试过将列更改为 TEXT 类型,但这也不起作用。 我试过了

CREATE TABLE expenses (expense_date DATE DEFAULT CAST(CURRENT_DATE, DATE);

我无法以任何方式将当前日期设置为默认日期。

mysql date default create-table
1个回答
0
投票

CURRENT_TIMESTAMP 与日期工作得很好。

只需插入一些值即可查看。

[temp]> CREATE TABLE expenses (expense_date DATE DEFAULT CURRENT_TIMESTAMP);
Query OK, 0 rows affected (0.042 sec)

 [temp]> show create table expenses;                                     +----------+--------------------------------------------------------------------------------------------------------------------+
| Table    | Create Table                                                                                                       |
+----------+--------------------------------------------------------------------------------------------------------------------+
| expenses | CREATE TABLE `expenses` (
  `expense_date` date DEFAULT current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+----------+--------------------------------------------------------------------------------------------------------------------+
1 row in set (0.000 sec)
© www.soinside.com 2019 - 2024. All rights reserved.