SELECT SYSDATETIME()
,SYSDATETIMEOFFSET()
,SYSUTCDATETIME()
,CURRENT_TIMESTAMP
,GETDATE()
,GETUTCDATE();
/* Returned:
SYSDATETIME() 2007-04-30 13:10:02.0474381
SYSDATETIMEOFFSET()2007-04-30 13:10:02.0474381 -07:00
SYSUTCDATETIME() 2007-04-30 20:10:02.0474381
CURRENT_TIMESTAMP 2007-04-30 13:10:02.047
GETDATE() 2007-04-30 13:10:02.047
GETUTCDATE() 2007-04-30 20:10:02.047
*/
1. 存储范围
- DATETIME:存储范围通常是 ‘1000-01-01 00:00:00’ 到 ‘9999-12-31 23:59:59’,精确到秒级。
- TIMESTAMP:存储范围通常是 ‘1970-01-01 00:00:01’ 到 ‘2038-01-19 03:14:07’,精确到秒级。
2. 存储方式
- DATETIME:以固定的格式存储日期和时间值,不受时区影响。它存储的是指定的日期和时间,无论时区如何。
- TIMESTAMP:存储的是从 ‘1970-01-01 00:00:00 UTC’ 到指定时间点的秒数。在存储时会自动转换为服务器的时区,然后在检索时再转换回来。这使得 TIMESTAMP 类型的时间戳可以根据服务器的时区进行自动调整。
3. 默认值行为
- DATETIME:它的默认值可以是任意合法的 DATETIME 值,例如 ‘2022-01-01 10:00:00’。
- TIMESTAMP:在大多数数据库中,如果没有为 TIMESTAMP 列指定默认值,它将默认为当前时间戳,例如 NOW() 或 CURRENT_TIMESTAMP。
4. 自动更新行为
- DATETIME:不提供自动更新功能。如果需要更新 DATETIME 列的值,需要显式指定新值。
- TIMESTAMP:有一个自动更新的选项,可以使 TIMESTAMP 列在每次更新行时自动更新为