網站搬家之mysql 5.7 date類型默認值不能設置‘0000-00-00’的問題


網站搬家,mysql版本由5.6升級到5.7,遇到問題:

mysql 5.7之后版本datetime默認值設置'0000-00-00',出現異常:Invalid default value for 'create_time'

查閱手冊

The DATE type is used for values with a date part but no time part. MySQL retrieves and displays DATE values in 'YYYY-MM-DD' format.
The supported range is '1000-01-01' to '9999-12-31'.

mysql 5.7使用NO_ZERO_IN_DATE, NO_ZERO_DATE兩個選項,禁止了0000這樣的日期和時間,理想的解決辦法:

 

將日期、時間格式改成 '1000-01-01' 到 '9999-12-31'之間即可

 

 

而我是利用導入導出SQL文件來搬家,批量替換有點麻煩,一種不推薦方法,在mysql的配置文件中,重新設置sql_mode,去掉這兩項就可以了。

 

linux:

 

修改my.cnf文件,重啟mysql。

 

Mac:

 

在MacOS中默認是沒有my.cnf 文件,如果需要對MySql 進行定制,拷貝/usr/local/mysql/support-files/目錄中任意一個.cnf 文件。將它放到其他目錄,按照上面修改完畢之后,更名為my.cnf,然后拷貝到/etc目錄再重啟下mysql就大功告成了。

 

Windows:

 

修改my.ini文件后重啟mysql。

 

[mysqld]中添加
sql-mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO

 

查看sql-mode的方法:

mysql數據庫的中有一個環境變量sql_mode,定義了mysql應該支持的sql語法,數據校驗等

    mysql> select @@sql_mode;  
    +----------------------------------------------------------------+  
    | @@sql_mode                                                     |  
    +----------------------------------------------------------------+  
    | STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |  
    +----------------------------------------------------------------+  

 查看系統變量

    mysql> show variables like 'sql_mode%'\G;    
    *************************** 1. row ***************************    
    Variable_name: sql_mode    
    Value: STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM