select FROM_UNIXTIME(32154654321);
输出:空
预期成果:格林威治标准时间12月9日星期二,下午2时55分1:55:21 GMT + 05:30
答案 0 :(得分:2)
这是Year-2038 problem。 TIMESTAMP
数据类型的最大值为2038-01-19 03:14:07
,因此无法获得预期结果。
MySQL 5.5:
TIMESTAMP
数据类型用于包含日期和时间部分的值。TIMESTAMP
的范围为'1970-01-01 00:00:01'UTC到'2038-01-19 03:14:07'UTC。 来源: https://dev.mysql.com/doc/refman/5.5/en/datetime.htmlMySQL 5.6 +: [...]和
TIMESTAMP
值的范围是'1970-01-01 00:00:01.000000'到'2038-01-19 03 :14:07.999999'
。 来源: https://dev.mysql.com/doc/refman/5.7/en/datetime.html
您可以找到一个非常good answer on stackoverflow,其中包含有关此问题的更多详细信息。
您可以使用PHP而不是MySQL将时间戳(未存储在TIMESTAMP
列中)转换为可读的日期时间,使用以下代码:
$timestamp = 32154654321;
$format = 'Y-m-d H:i:s';
$date = new DateTime();
$date->setTimestamp($timestamp);
echo $date->format($format);
答案 1 :(得分:2)
这就是原因:https://dev.mysql.com/doc/refman/5.5/en/datetime.html
TIMESTAMP数据类型用于包含日期和时间部分的值。 TIMESTAMP的范围为'1970-01-01 00:00:01'UTC到'2038-01-19 03:14:07'UTC。
答案 2 :(得分:0)
您无法输入如32154654321
mysql中的时间戳最大值为2147483647,相当于 到2038-01-19 05:14:07这是由于底层的32位 局限性。将导致在此之外的时间戳上使用该函数 返回NULL。如果需要,请使用DATETIME作为存储类型 超出此范围的日期。