MySQL中的日期和时间数据类型主要包括DATE
、TIME
、DATETIME
和TIMESTAMP
。其中,TIMESTAMP
类型有一个特性,即它的值会根据时区的变化而自动更新为当前的日期和时间。
当你创建一个TIMESTAMP
类型的列而没有指定默认值时,MySQL会自动将其设置为当前的日期和时间。这是TIMESTAMP
类型的一个默认行为。
TIMESTAMP
类型的列会在插入或更新记录时自动设置为当前的日期和时间。DATETIME
类型,TIMESTAMP
类型使用更少的存储空间(通常是4个字节)。TIMESTAMP
类型会根据服务器的时区设置进行转换,这使得它在处理跨时区的数据时更加方便。DATE
:仅存储日期(YYYY-MM-DD)。TIME
:仅存储时间(HH:MM:SS)。DATETIME
:存储日期和时间(YYYY-MM-DD HH:MM:SS),但不会自动更新为当前时间。TIMESTAMP
:存储日期和时间(YYYY-MM-DD HH:MM:SS),并会自动更新为当前时间。TIMESTAMP
列的值没有自动更新?explicit_defaults_for_timestamp
系统变量设置为ON
。当此变量为ON
时,TIMESTAMP
列不会自动设置为当前时间,除非明确指定。explicit_defaults_for_timestamp
设置为OFF
。可以通过以下SQL命令修改:SET GLOBAL explicit_defaults_for_timestamp = OFF;
或者,在创建表时明确指定TIMESTAMP
列的默认值:
CREATE TABLE example (
id INT PRIMARY KEY,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
TIMESTAMP
类型会根据服务器的时区设置进行转换,这可能导致在不同时区的客户端上显示不一致的时间。CONVERT_TZ()
函数进行时区转换。例如:SELECT CONVERT_TZ(created_at, @@session.time_zone, '+08:00') AS converted_time FROM example;
领取专属 10元无门槛券
手把手带您无忧上云