2015-12-16 71 views
3

mysql 5.5.46中有表和5.6.28中的同一表。我在mysql 5.5.46上備份數據庫,然後在5.6.28上恢復它。所以表在兩臺服務器上都有相同的結構和相同的數據。日期時間類型在mysql 5.5.46和5.6.28中的區別

CREATE TABLE `test` (
    `ID` int(11) NOT NULL AUTO_INCREMENT, 
    `Path` varchar(250) NOT NULL, 
    `Link` varchar(250) NOT NULL, 
    `Company` varchar(250) NOT NULL, 
    `Width` int(11) NOT NULL, 
    `Height` int(11) NOT NULL, 
    `View_Count` int(11) NOT NULL DEFAULT '0', 
    `create_date` datetime NOT NULL, 
    PRIMARY KEY (`ID`) 
) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8 

有無這樣的查詢:

insert into test(path,link,company,width,height,view_count) 
values('test','test','test',10,10,10) 

mysql 5.5.46此查詢成功執行和CREATE_DATE值是'0000-00-00 00:00:00'

mysql 5.6.28有一個錯誤Field 'Create_Date' doesn't have a default value和它的邏輯,因爲CREATE_DATE不爲空,因此沒有任何默認值。但它如何在5.5.46上工作?

回答

3

根據您提供給我們的信息,您似乎以非嚴格模式運行MySQL 5.5.46,但在嚴格模式下運行MySQL 5.6.28。從MySQL documentation

聲明爲NOT NULL且沒有顯式DEFAULT子句的TIMESTAMP列被視爲沒有默認值。對於爲這樣的列指定沒有顯式值的插入行,結果取決於SQL模式。如果啓用嚴格的SQL模式,則會發生錯誤。如果未啓用嚴格SQL模式,則會爲該列分配隱式默認值「0000-00-00 00:00:00」,併發出警告。 這與MySQL如何對待其他時態類型(如DATETIME)類似。

create_dateDATETIME型的,看來你試圖做的5.6.28數據庫INSERT嚴格模式,從而得到一個錯誤。

+1

謝謝你的回答。 'SET @@ global.sql_mode ='';'幫助了我 – GeoVIP