MySQL CURRENT_DATE/CURDATE() 默认 DATE 值不起作用

MySQL CURRENT_DATE/CURDATE() 默认 DATE 值不起作用

MySQL 中,CURRENT_DATECURDATE() 函数都可以用于生成当前日期。通常,我们使用这两个函数在表定义时设置默认日期值。例如,我们可以创建一个名为 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_DATECURDATE() 函数解释为字符串。如果您将当前日期作为字符串传递给 DATE 类型的列时,MySQL 不会自动将其转换为日期类型。因此,它会将 0000-00-00 作为默认值。

阅读更多:MySQL 教程

解决方法

要解决这个问题,我们可以使用 DATE 函数将 CURRENT_DATECURDATE() 函数转换为日期类型,然后将其作为默认值传递给 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_DATECURDATE() 函数在设置默认值时不起作用,因为 MySQL 默认会将其解释为字符串。要解决这个问题,我们可以使用 DATE 函数或 CAST 函数将日期类型转换为字符串。这将确保在插入行时,列中包含正确的日期值。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程