MySQL CURRENT_DATE/CURDATE() 默认 DATE 值不起作用
在 MySQL 中,CURRENT_DATE
和 CURDATE()
函数都可以用于生成当前日期。通常,我们使用这两个函数在表定义时设置默认日期值。例如,我们可以创建一个名为 orders
的表,其中包含以下列:
CREATE TABLE orders (
id INT AUTO_INCREMENT PRIMARY KEY,
order_date DATE DEFAULT CURRENT_DATE,
total_amount DECIMAL(10,2)
);
在上面的示例中,order_date
列设置了一个默认值为当前日期。但是,当您向该表中插入行时,您会发现 order_date
始终都是 0000-00-00,而不是当前日期。
这是因为 MySQL 默认情况下会将 CURRENT_DATE
和 CURDATE()
函数解释为字符串。如果您将当前日期作为字符串传递给 DATE
类型的列时,MySQL 不会自动将其转换为日期类型。因此,它会将 0000-00-00
作为默认值。
阅读更多:MySQL 教程
解决方法
要解决这个问题,我们可以使用 DATE
函数将 CURRENT_DATE
或 CURDATE()
函数转换为日期类型,然后将其作为默认值传递给 DATE
类型的列。例如:
CREATE TABLE orders (
id INT AUTO_INCREMENT PRIMARY KEY,
order_date DATE DEFAULT DATE(CURRENT_DATE),
total_amount DECIMAL(10,2)
);
或者,我们还可以使用 CAST
函数将字符串转换为日期类型:
CREATE TABLE orders (
id INT AUTO_INCREMENT PRIMARY KEY,
order_date DATE DEFAULT CAST(CURRENT_DATE AS DATE),
total_amount DECIMAL(10,2)
);
现在,当您向该表中插入行时,order_date
列将包含当前日期。
总结
MySQL 中的 CURRENT_DATE
和 CURDATE()
函数在设置默认值时不起作用,因为 MySQL 默认会将其解释为字符串。要解决这个问题,我们可以使用 DATE
函数或 CAST
函数将日期类型转换为字符串。这将确保在插入行时,列中包含正确的日期值。