1072浏覽量

mysql的sql_mode合理設置

來源: 時間:2016-05-25
sql_mode是個很容易被忽視的變量,默認值是空值,在這種設置下(xià)是可以允許一(yī)些非法操作的,比如允許一(yī)些非法數據的插入。在生(shēng)産環境必須将這個值設置爲嚴格模式,所以開(kāi)發、測試環境的數據庫也必須要設置,這樣在開(kāi)發測試階段就可以發現問題

sql_mode常用值如下(xià):
ONLY_FULL_GROUP_BY:

對于GROUP BY聚合操作,如果在SELECT中(zhōng)的列,沒有在GROUP BY中(zhōng)出現,那麽這個SQL是不合法的,因爲列不在GROUP BY從句中(zhōng)


NO_AUTO_VALUE_ON_ZERO:

該值影響自增長列的插入。默認設置下(xià),插入0或NULL代表生(shēng)成下(xià)一(yī)個自增長值。如果用戶 希望插入的值爲0,而該列又(yòu)是自增長的,那麽這個選項就有用了。


STRICT_TRANS_TABLES:

在該模式下(xià),如果一(yī)個值不能插入到一(yī)個事務表中(zhōng),則中(zhōng)斷當前的操作,對非事務表不做限制

NO_ZERO_IN_DATE:

在嚴格模式下(xià),不允許日期和月份爲零


NO_ZERO_DATE:

設置該值,mysql數據庫不允許插入零日期,插入零日期會抛出錯誤而不是警告。


ERROR_FOR_DIVISION_BY_ZERO:

在INSERT或UPDATE過程中(zhōng),如果數據被零除,則産生(shēng)錯誤而非警告。如 果未給出該模式,那麽數據被零除時MySQL返回NULL


NO_AUTO_CREATE_USER:

禁止GRANT創建密碼爲空的用戶


NO_ENGINE_SUBSTITUTION:

如果需要的存儲引擎被禁用或未編譯,那麽抛出錯誤。不設置此值時,用默認的存儲引擎替代,并抛出一(yī)個異常


PIPES_AS_CONCAT:

将"||"視爲字符串的連接操作符而非或運算符,這和Oracle數據庫是一(yī)樣的,也和字符串的拼接函數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.

如果使用mysql,爲了繼續保留大(dà)家使用oracle的習慣,可以對mysql的sql_mode設置如下(xià):

在my.cnf添加如下(xià)配置
[mysqld]
sql_mode='ONLY_FULL_GROUP_BY,NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,

ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,PIPES_AS_CONCAT,ANSI_QUOTES'

聯系我(wǒ)們

一(yī)次需求提交或許正是成就一(yī)個出色産品的開(kāi)始。
歡迎填寫表格或發送合作郵件至: qczsky@126.com

大(dà)理青橙科技

電(diàn)話(huà):13988578755 13988578755

郵箱:qczsky@126.com

地址:大(dà)理市下(xià)關龍都春天10層