我有一个表,在这个表中,我有一个列,它当前存储一个类型为BigInt的值,我想改变这个列以包含‘时间戳’值。
我怎样才能做到这一点。我试过:
ALTER TABLE t
MODIFY c TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;我得到的是:
#1292 - Incorrect datetime value: '1524120113' for column 'created_temp' at row 1和
ALTER TABLE share ADD created_temp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;
UPDATE share SET created_temp = UNIX_TIMESTAMP(created);我得到的是:#1292 - Incorrect datetime value: '1524120113'
created的内容是使用UNIX_TIMESTAMP()创建的
发布于 2018-10-23 00:08:29
您得到了第一个错误,因为DBMS不能动态地转换列。第二个错误来自于这样一个事实,即UNIX_TIMESTAMP()需要一个DATE、TIME或TIMESTAMP字符串而不是整数,所以您应该使用FROM_UNIXTIME()。
关于这两个函数之间的区别,UNIX_TIMESTAMP()文档有一个重要的说明:
如果使用UNIX_TIMESTAMP()和FROM_UNIXTIME()在时间戳值和Unix时间戳值之间进行转换,则转换是有损的,因为映射不是双向一对一的。例如,由于本地时区更改的约定,两个UNIX_TIMESTAMP()可以将两个时间戳值映射到相同的Unix时间戳值。FROM_UNIXTIME()将该值映射回原始时间戳值中的一个。
--
下面是执行任务所需的步骤(,它可能需要很长时间才能完成,因为所有行都必须重写!):
https://stackoverflow.com/questions/50400259
复制相似问题