Khi tôi là yound và ngu ngốc có ít kinh nghiệm, tôi đã quyết định sẽ tạo ra dấu thời gian trong PHP và lưu trữ chúng trong cột INT
trong bảng innodb MySQL của tôi. Bây giờ, khi bảng này có hàng triệu bản ghi và cần một số truy vấn dựa trên ngày, đã đến lúc chuyển đổi cột này thành TIMESTAMP
. Làm thế nào để tôi làm điều này?Chuyển đổi cột mysql từ INT thành TIMESTAMP
Currenlty, bàn của tôi trông như thế này:
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
Dưới đây là các truy vấn tôi đã đưa ra, để chuyển đổi date_sent
cột để 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();
Mọi thứ dường như đúng với tôi, nhưng khi thời gian đến cho UPDATE
pm SET
date_sent2 =
date_sent ;
, tôi nhận được một giá trị cảnh báo và dấu thời gian vẫn trống:
+---------+------+--------------------------------------------------+
| Level | Code | Message |
+---------+------+--------------------------------------------------+
| Warning | 1265 | Data truncated for column 'date_sent2' at row 1 |
Tôi đang làm gì sai và có cách nào sửa lỗi này không?
Cảm ơn bạn. Hoạt động hoàn hảo! –