標籤:事務 mod 儲存引擎 tab ror 自動 引擎 去除 bst
54140286
70432123
升級mysql後,居然使用錯誤。更新時候提示timestamp類型錯誤,提示無預設值錯誤
原來是mysql提升了安全措施,原來的0000-00-00不被允許了,預設值也必須收購設定了
需要更改一下,但尚未找到快速更改的方法,只好先更改mysql設定了:
一、查看 sql_mode
mysql> select @@sql_mode;
二、sql_mode值的含義:
ONLY_FULL_GROUP_BY:
對於GROUP BY彙總操作,如果在SELECT中的列,沒有在GROUP BY中出現,那麼將認為這個SQL是不合法的,因為列不在GROUP BY從句中
STRICT_TRANS_TABLES:
在該模式下,如果一個值不能插入到一個事務表中,則中斷當前的操作,對非事務表不做任何限制
NO_ZERO_IN_DATE:
在strict 模式,不接受月或日部分為0的日期。如果使用IGNORE選項,我們為類似的日期插入‘0000-00-00‘。在非strict 模式,可以接受該日期,但會產生警告。
NO_ZERO_DATE:
在strict 模式,不要將 ‘0000-00-00‘做為合法日期。你仍然可以用IGNORE選項插入零日期。在非strict 模式,可以接受該日期,但會產生警告
ERROR_FOR_DIVISION_BY_ZERO:
在strict 模式,在INSERT或UPDATE過程中,如果被零除(或MOD(X,0)),則產生錯誤(否則為警告)。如果未給出該模式,被零除時MySQL返回NULL。如果用到INSERT IGNORE或UPDATE IGNORE中,MySQL產生被零除警告,但操作結果為NULL。
NO_AUTO_CREATE_USER
防止GRANT自動建立新使用者,除非還指定了密碼。
NO_ENGINE_SUBSTITUTION:
如果需要的儲存引擎被禁用或未編譯,那麼拋出錯誤。不設定此值時,用預設的儲存引擎替代,並拋出一個異常
三、更改 my.conf
將上面紅色的去除
#sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTIONsql_mode=‘ONLY_FULL_GROUP_BY,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION‘
四、重啟
mysql.serve restart
systemctl restart mysqlnd
MySQL的sql_mode解析與設定