2017-04-24 44 views
1

我想在MySQL中允許零日期。我已將sql_mode更改爲ALLOW_INVALID_DATES,NO_ENGINE_SUBSTITUTIONmysql - 需要允許'0000-00-00 00:00:00'日期

我已將其更改爲/etc/mysql/my.cnf

然而,我當我嘗試插入數據出現錯誤,

數據截斷:不正確的日期時間值: '0000-00-00 00:00:00'

的MySQL版本是5.7.18。

任何想法都會有很大的幫助。

+2

哪些數據是,當這個錯誤發生在你插入?爲什麼你需要允許無效的日期? –

+1

您是否重新啓動服務器? – Igor

+0

嗯,我想'varchar'領域。那麼,爲什麼你不使用'varchar'?當你執行選擇,更新,刪除,......你可以用'日期轉換()''一樣SELECT ID FROM MY_TABLE其中date(my_date_1)> DATE(my_date_2)ORDER BY DATE(my_date_3)DESC' ... 而...您可以檢查是否是零日期像'WHERE my_date_1 =「0000-00-00 00:00:00'' –

回答

-1

它不應該說你做錯了。如果您打算不存儲任何內容,該列應該爲空,並且當您應該使用NULL時,您不應嘗試插入空字符串。

考慮這一點,雖然:

如果嚴格模式不生效,MySQL的插入調整值無效或遺漏值,併產生警告。 但是,當嚴格模式生效時...

對於事務性表,當啓用STRICT_ALL_TABLES或STRICT_TRANS_TABLES時,數據更改語句中的無效值或缺失值發生錯誤。該聲明被中止並回滾

http://dev.mysql.com/doc/refman/5.6/en/sql-mode.html#sql-mode-strict SELECT @@ SQL_MODE;應該顯示您正在運行(至少)STRICT_TRANS_TABLES。雖然這不是5.6的內部默認值,但它包含在默認的5.6配置文件中。如果您需要舊的行爲,您需要將其刪除並重新啓動服務器。

...雖然你應該考慮讓你的代碼更加正確。

嘗試啓用此

ALLOW_INVALID_DATES

http://dev.mysql.com/doc/refman/5.6/en/sql-mode.html#sqlmode_allow_invalid_dates

注:我不建議這樣做。我只是在回答如何去做。在我看來,最好清理查詢和數據,併爲非空列提供良好的默認值。

+0

OP已啓用ALLOW_INVALID_DATES。這正是問題:啓用了ALLOW_INVALID_DATES,但是當使用零日期時,MySQL提供了一個錯誤。 – Shadow

0

,我要在這裏假設你想有一個有效的日期,使您的查詢從來沒有檢查NULL 。

做到這一點的一種方法是使用我喜歡稱爲「永久」日期的東西。

這些實質上是DATETIME數據類型允許的最小/最大日期。

在我的使用中,通常存在從 - 到成對的「窗口」,但您可能只需要最短的日期。

the Mysql manual

的DATETIME類型用於包含日期和時間 份值。 MySQL的檢索並在 'YYYY-MM-DD HH:MM:SS' 顯示DATETIME值格式。支持的範圍是'1000-01-01 00:00:00'至 '9999-12-31 23:59:59'。

所以,一種可能適合你的方法是利用'1000-01-01 00:00:00'而不是零日期。