2012-02-03 14 views
10

私はyoundでしたが、の愚かなは経験がほとんどなかったので、PHPでタイムスタンプを生成し、MySQL innodbテーブルのINTカラムに格納することをお勧めします。今、このテーブルに数百万のレコードがあり、日付ベースのクエリが必要な場合は、この列をTIMESTAMPに変換します。これはどうすればいいですか?INTからTIMESTAMPへのmysqlカラムの変換

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 

は、私がTIMESTAMPdate_sent列を変換するには、思い付いたクエリは、次のとおりです。

-- 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(); 

すべてが私には正しいようだが、とき時間が来るUPDATE pm SET date_sent2 = date_sent ;、私は警告とタイムスタンプの値が空のままになる:

+---------+------+--------------------------------------------------+ 
| Level | Code | Message           | 
+---------+------+--------------------------------------------------+ 
| Warning | 1265 | Data truncated for column 'date_sent2' at row 1 | 

私は間違っていますが、これを修正する方法はありますか?

答えて

28

ほとんどの場合、値を直接コピーする代わりに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(); 
+0

ありがとうございます。完璧に動作します! –

関連する問題