我正在尝试创建一个包含 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);
我无法以任何方式将当前日期设置为默认日期。
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)