mysql timestamp 转换 int_将mysql列从INT转换为TIMESTAMP

当我和你愚蠢的经验不多时,我决定用PHP生成时间戳并将它们存储在我的MySQL innodb表中的INT列中是个好主意.现在,当此表具有数百万条记录并需要一些基于日期的查询时,是时候将此列转换为TIMESTAMP.我该怎么做呢?

Currenlty,我的桌子看起来像这样:

id (INT) | message (TEXT) | date_sent (INT)

---------------------------------------------

1 | hello? | 1328287526

2 | how are you? | 1328287456

3 | shut up | 1328234234

4 | ok | 1328678978

5 | are you... | 1328345324

以下是我提出的查询,将da​​te_sent列转换为TIMESTAMP:

-- creating new column of TIMESTAMP type

ALTER TABLE `pm`

ADD COLUMN `date_sent2` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP();

-- assigning value from old INT column to it, in hope that it will be recognized as timestamp

UPDATE `pm` SET `date_sent2` = `date_sent`;

-- dropping the old INT column

ALTER TABLE `pm` DROP COLUMN `date_sent`;

-- changing the name of the column

ALTER TABLE `pm` CHANGE `date_sent2` `date_sent` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP();

对我来说一切似乎都是正确的,但是当UPDATEpmSETdate_sent2 = date_sent;时,我得到一个警告并且时间戳值保持为空:

+---------+------+--------------------------------------------------+

| Level | Code | Message |

+---------+------+--------------------------------------------------+

| Warning | 1265 | Data truncated for column 'date_sent2' at row 1 |

我做错了什么,是否有办法解决这个问题?

解决方法:

你快到了,使用FROM_UNIXTIME()而不是直接复制值.

-- creating new column of TIMESTAMP type

ALTER TABLE `pm`

ADD COLUMN `date_sent2` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP();

-- Use FROM_UNIXTIME() to convert from the INT timestamp to a proper datetime type

-- assigning value from old INT column to it, in hope that it will be recognized as timestamp

UPDATE `pm` SET `date_sent2` = FROM_UNIXTIME(`date_sent`);

-- dropping the old INT column

ALTER TABLE `pm` DROP COLUMN `date_sent`;

-- changing the name of the column

ALTER TABLE `pm` CHANGE `date_sent2` `date_sent` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP();

标签:mysql,timestamp

来源: https://codeday.me/bug/20190930/1836094.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值