出錯原因
mysql5.7版本引起的默認值不兼容的問題,同樣的問題在mysql8.0可能也會出現。
出問題的值有:
NO_ZERO_IN_DATE
在嚴格模式下,不允許日期和月份為零。
NO_ZERO_DATE
設置該值,mysql數據庫不允許插入零日期,插入零日期會拋出錯誤而不是警告。
ONLY_FULL_GROUP_BY
對於GROUP BY聚合操作,如果在SELECT中的列,沒有在GROUP BY中出現,那么這個SQL是不合法的,因為列不在GROUP BY從句中。
解決方式
方式一
執行select @@sql_mode
,復制查詢出來的值並將其中的NO_ZERO_DATE刪除,然后執行set sql_mode = ‘修改后的值’
。
此方法只在當前會話中生效
方式二
執行select @@global.sql_mode
,復制查詢出來的值並將其中的NO_ZERO_DATE刪除,然后執行set global sql_mode = ‘修改后的值’
。
此方法在當前服務中生效,重新MySQL服務后失效
方法三
在mysql的安裝目錄下,打開my.ini或my.cnf文件,在wamp下,MySQL 5.7里是沒有設置 SQL_MODE 的。
1.my.ini文件中找到 [mysqld]
2.如果沒有SQL_MODE,就添加,有就修改一下
sql_mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"
或者
sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
最后重啟MySQL
service mysqld restart