MySQL同表Unix时间列转换后复制到TIMESTAMP列异常求解
问题原因
- 核心问题是
FROM_UNIXTIME指定的输出格式与MySQLTIMESTAMP类型支持的合法输入格式不匹配:你使用的格式化参数'%Y %M %D %H:%i:%s'会输出类似2021 October 8th 22:37:48的字符串,包含英文月份全称、日期序数后缀,MySQL无法将这类字符串自动解析为合法的TIMESTAMP值,因此会写入默认零值0000-00-00 00:00:00。 - 你使用的测试时间戳
1633711068对应时间为2021年,属于MySQL TIMESTAMP类型的支持范围(1970-01-01 ~ 2038-01-19),不存在取值越界问题。
解决方案
直接省略FROM_UNIXTIME的第二个格式化参数即可,该函数默认返回YYYY-MM-DD HH:MM:SS格式的时间值,完全适配TIMESTAMP类型的写入要求,修改后的SQL语句如下:
UPDATE foods SET ColumnB = FROM_UNIXTIME(ColumnA) WHERE ColumnB IS NULL
如果业务场景需要显式指定格式,可将格式化参数替换为'%Y-%m-%d %H:%i:%s',输出结果同样符合TIMESTAMP的写入规范。
内容的提问来源于stack exchange,提问作者Sylar
相关产品推荐
相关产品推荐

