2011-08-03 78 views
2

如何將帶TIMESTAMP的列轉換爲DATETIME並保留日期?我正在使用PHPMyAdmin。TIMESTAMP到DATETIME轉換?

此外,時間戳可以選擇自動填充,有沒有辦法在DATETIME這樣做?或者我應該每次使用PHP插入它?

感謝

+1

TIMESTAMP是列式還是TIMESTAMP是unix時間戳? – Wrikken

+0

請注意,TIMESTAMP(MySQ:datatype)存儲在GMT中,並轉換爲當前會話時區進行演示。 DATETIME按原樣存儲,因此在時區以外的時區中從TIMESTAMP轉換爲DATETIME可能會導致時間偏移。 – Mchl

回答

1

如果該查詢

ALTER TABLE table CHANGE `time` `time` datetime 

會丟失日期,您可以創建新列,然後分配舊值然後刪除舊列並重命名新的列

ALTER TABLE table ADD `datetime` datetime AFTER `time`; 
UPDATE table set datetime=time; 
ALTER TABLE table DROP datetime; 
ALTER TABLE CHANGE `datetime` `time` datetime 

Read this
這意味着,例如,可以不設置默認日期列是一個函數的值,例如NOW()CURRENT_DATE

-1

使用FROM_UNIXTIME()從UNIX時間戳轉換爲常規datetime值。

unix時間戳在mysql中沒有本地類型 - 它只是一個整數。 timestamp字段將自動填充,但僅限於任何給定表中的第一個字段。關於那個here的更多細節。

+0

嗯,好點,'TIMESTAMP'列類型,或'TIMESTAMP' unix-timestamp ... – Wrikken

1
ALTER TABLE tablename MODIFY COLUMN columnname DATETIME; 

(上一個測試表第一次測試...)

沒有辦法設置默認爲當前時間保存觸發器:

DELIMITER $ 
    CREATE TRIGGER tablename_before_insert BEFORE INSERT ON tablename 
    FOR EACH ROW 
    BEGIN 
    IF NEW.columnname IS NULL THEN 
     SET NEW.columnname = NOW(); 
    END IF; 
    IF NEW.datum = '0000-00-00 00:00:00' THEN 
     SET NEW.columnname = NOW(); 
    END IF; 
    END$ 
    DELIMITER ;