MySQL中的日期类型主要包括DATE
、DATETIME
和TIMESTAMP
。这些类型用于存储日期和时间值。
DATE
:存储格式为YYYY-MM-DD
,范围从1000-01-01
到9999-12-31
。DATETIME
:存储格式为YYYY-MM-DD HH:MM:SS
,范围从1000-01-01 00:00:00
到9999-12-31 23:59:59
。TIMESTAMP
:存储格式也为YYYY-MM-DD HH:MM:SS
,但范围从1970-01-01 00:00:01
UTC到2038-01-19 03:14:07
UTC。在MySQL中,日期类型的默认值取决于列的定义和表的创建方式。
CREATE TABLE example (
id INT AUTO_INCREMENT PRIMARY KEY,
date_column DATE DEFAULT '2023-01-01',
datetime_column DATETIME DEFAULT CURRENT_TIMESTAMP,
timestamp_column TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
在这个例子中:
date_column
的默认值是2023-01-01
。datetime_column
的默认值是插入记录时的当前时间。timestamp_column
的默认值也是插入记录时的当前时间,并且在每次更新记录时会自动更新为当前时间。ALTER TABLE example
MODIFY date_column DATE DEFAULT '2024-01-01';
TIMESTAMP
类型可以在插入或更新记录时自动更新时间戳。DATE
DATETIME
TIMESTAMP
TIMESTAMP
类型的默认值在插入时不更新?原因:可能是由于表的explicit_defaults_for_timestamp
系统变量设置为ON
。当这个变量为ON
时,TIMESTAMP
列的默认值和自动更新行为需要显式指定。
解决方法:
SET GLOBAL explicit_defaults_for_timestamp = OFF;
或者在创建表时显式指定:
CREATE TABLE example (
id INT AUTO_INCREMENT PRIMARY KEY,
timestamp_column TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
原因:可能是由于插入的数据格式不正确,或者数据库的字符集和排序规则不支持某些日期格式。
解决方法:
确保插入的数据格式正确,并检查数据库的字符集和排序规则:
ALTER DATABASE your_database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
领取专属 10元无门槛券
手把手带您无忧上云