2012-02-03 17 views
10

को जब मैं yound था और बेवकूफ थोड़ा experiance था, मैंने तय कर लिया है कि यह एक अच्छा विचार होगा, पीएचपी में timestamps पैदा करते हैं और मेरी MySQL InnoDB तालिका में INT कॉलम में उन्हें स्टोर करने के लिए। अब, जब इस तालिका में लाखों रिकॉर्ड हैं और कुछ दिनांक-आधारित प्रश्नों की आवश्यकता है, तो यह इस कॉलम को TIMESTAMP में बदलने का समय है। मैं यह कैसे करु?INT से mysql स्तंभ परिवर्तित 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 

यहाँ प्रश्नों मैं के साथ आया था, कन्वर्ट करने के लिए date_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(); 

सब कुछ मेरे लिए सही लगता है, लेकिन जब समय UPDATE बजे 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

धन्यवाद। अच्छी तरह से काम! –

संबंधित मुद्दे