Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

เปลี่ยนชนิดข้อมูลคอลัมน์จาก TEXT เป็น TIMESTAMP ใน MySQL

ใช้คำสั่ง ALTER TABLE ... MODIFY COLUMN เพื่อเปลี่ยนชนิดข้อมูลจาก TEXT เป็น TIMESTAMP

รูปแบบคำสั่ง

ALTER TABLE yourTableName MODIFY COLUMN yourColumnName TIMESTAMP;

ตัวอย่างขั้นตอน

1. สร้างตารางชนิด TEXT

mysql> create table textTotimestampdemo (
    -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> Source text
    -> );

2. ตรวจสอบโครงสร้างก่อนเปลี่ยน

mysql> desc textTotimestampdemo;
+--------+---------+------+-----+---------+----------------+
| Field  | Type    | Null | Key | Default | Extra          |
+--------+---------+------+-----+---------+----------------+
| Id     | int(11) | NO   | PRI | NULL    | auto_increment |
| Source | text    | YES  |     | NULL    |                |
+--------+---------+------+-----+---------+----------------+

3. เปลี่ยนชนิดข้อมูล

mysql> alter table textTotimestampdemo modify column Source TIMESTAMP;

4. ตรวจสอบหลังเปลี่ยน

mysql> desc textTotimestampdemo;
+--------+-----------+------+-----+---------+----------------+
| Field  | Type      | Null | Key | Default | Extra          |
+--------+-----------+------+-----+---------+----------------+
| Id     | int(11)   | NO   | PRI | NULL    | auto_increment |
| Source | timestamp | YES  |     | NULL    |                |
+--------+-----------+------+-----+---------+----------------+

⚠️ ข้อควรระวัง

  • ข้อมูลเดิมจะสูญหาย หากข้อความใน TEXT ไม่ได้อยู่ในรูปแบบวันที่/เวลาที่ MySQL เข้าใจ
  • ควร สำรองข้อมูลก่อน หรือสร้างคอลัมน์ใหม่ คัดลอกข้อมูลที่แปลงแล้ว แล้วลบคอลัมน์เก่า
  • รูปแบบที่ MySQL รับได้: YYYY-MM-DD HH:MM:SS, YYYYMMDDHHMMSS, timestamp number

วิธีปลอดภัยกว่า

-- 1. เพิ่มคอลัมน์ใหม่
ALTER TABLE textTotimestampdemo ADD COLUMN Source_new TIMESTAMP;

-- 2. อัปเดตข้อมูล (แปลงรูปแบบให้ถูกต้อง)
UPDATE textTotimestampdemo SET Source_new = STR_TO_DATE(Source, '%Y-%m-%d %H:%i:%s');

-- 3. ตรวจสอบข้อมูล แล้วลบคอลัมน์เก่าและ rename ใหม่
ALTER TABLE textTotimestampdemo DROP COLUMN Source, CHANGE Source_new Source TIMESTAMP;