为何MariaDB默认将TIMESTAMP转为整数的方式如此运作?
关于MariaDB中TIMESTAMP转整数的行为说明
这是MariaDB的预期行为,并非你忽略了什么,核心是两种转换的逻辑完全不同:
1. CAST(timestamp_column AS INT/FLOAT)的转换逻辑
MariaDB将TIMESTAMP类型转为数值类型时,会先把TIMESTAMP转换为标准字符串格式'YYYY-MM-DD HH:MM:SS',然后自动移除所有非数字字符(-和:),最后将剩余的数字串转为整数/浮点数。这就是你得到YYYYMMDDHHMMSS格式整数的原因,转FLOAT只是基于这个数字串的浮点表示,所以结果和INT本质一致。
2. UNIX_TIMESTAMP()的作用
UNIX_TIMESTAMP(timestamp_column)是专门用于提取Unix时间戳的函数,它的逻辑是计算从1970-01-01 00:00:00 UTC到目标TIMESTAMP的秒数,和CAST的字符串转数值逻辑完全无关,所以结果自然不匹配。
正确的处理方式
- 如果需要Unix时间戳(秒级),直接使用
UNIX_TIMESTAMP(timestamp_column_name)即可,这是最直接高效的方式。 - 如果确实需要
YYYYMMDDHHMMSS格式的数值,当前的CAST写法是可行的,但更推荐用可读性更强的写法:CAST(DATE_FORMAT(timestamp_column_name, '%Y%m%d%H%i%s') AS UNSIGNED) - 若要对时间进行数值化处理(比如计算时间差),优先使用时间函数(如
TIMESTAMPDIFF())而非手动处理YYYYMMDDHHMMSS格式的数值,避免出现逻辑错误。
内容的提问来源于stack exchange,提问作者Mathis Germa
相关产品推荐
相关产品推荐

