Mysql sql mode的合理設定

2022-09-06 02:51:11 字數 1257 閱讀 9129

sql_mode是個很容易被忽視的變數,預設值是空值,在這種設定下是可以允許一些非法操作的,比如允許一些非法資料的插入。在生產環境必須將這個值設定為嚴格模式。所以開發、測試環境的資料庫也必須要設定,這樣在開發測試階段就可以發現問題。值說明

only_full_group_by

對於group by聚合操作,如果在select中的列,沒有在group by**現,那麼這個sql是不合法的,因為列不在group by從句中

no_auto_value_on_zero

該值影響自增長列的插入。預設設定下,插入0或null代表生成下乙個自增長值。如果使用者希望插入的值為0,而該列又是自增長的,那麼這個選項就有用了

strict_trans_tables

在該模式下,如果乙個值不能插入到乙個事務表中,則中斷當前的操作,對非事務表不做限制

no_zero_in_date

設定該值,mysql資料庫不允許插入零日期,插入零日期會丟擲錯誤而不是警告

error_for_division_by_zero

在insert或update過程中,如果資料被零除,則產生錯誤而非警告。如 果未給出該模式,那麼資料被零除時mysql返回null

no_auto_create_user

禁止grant建立密碼為空的使用者

no_engine_substitution

如果需要的儲存引擎被禁用或未編譯,那麼丟擲錯誤。不設定此值時,用預設的儲存引擎替代,並丟擲乙個異常

pipes_as_concat

將"||"視為字串的連線操作符而非或運算子,這和oracle資料庫是一樣的,也和字串的拼接函式concat相類似

ansi_quotes

啟用ansi_quotes後,不能用雙引號來引用字串,因為它被解釋為識別符

oracle資料庫的sql_mode設定等同:pipes_as_concat, ansi_quotes, ignore_space, no_key_options, no_table_options, no_field_options, no_auto_create_user

在my.cnf新增如下配置

[mysqld]

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_substitution

參考:

mysql sqlmode幾個模式

sql mode 參考mysql官方文件 strict trans tables 針對insert,update,create table操作對於資料型別錯誤,不能為空等都會丟擲錯誤,而對於查詢一般只會警告 no auto create user 防止grant語句自動建立使用者,在建立使用者需指定...

合理的需求

工作這一年多以來,學到很多以前沒學到的新知識,也因為以前學過的很多知識沒有用而漸漸的被大腦拋棄了,有得有失。不過前幾天做帖子功能的時候,真的讓我記住了。一定要狠狠的記錄下,不該發生的錯誤。主題和回覆是一對多關係,當刪除主題的時候應該把對應的所有回覆全部刪除,這是多正常的邏輯,可是我卻給忘了,真是太過...

存在即合理不代表存在的就是合理的

這篇文章不是想講解 存在即合理 這句話,而是想點一下那些錯誤的理解典故,又錯誤運用的人。前言 存在即合理是客觀唯心主義的理論,意思是 宇宙的本原是絕對精神 理性 它自在地具備著一切,然後外化出自然界 人類社會 精神科學,最後在更高的層次上回歸自身。溯源黑格爾名言,有興趣自行查詢,這裡不展開討論。說實...