MySQL的sql_mode解析與設定

來源:互聯網
上載者:User

標籤:事務   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解析與設定

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.