mysql sql_mode="" 的感化解釋。本站提示廣大學習愛好者:(mysql sql_mode="" 的感化解釋)文章只能為提供參考,不一定能成為您想要的結果。以下是mysql sql_mode="" 的感化解釋正文
sql_mode="",即強迫不設定MySql形式(如不作輸出檢測、毛病提醒、語法形式檢討等)應當能進步機能,但有以下成績:
假如拔出了不適合數據(毛病類型或超凡),mysql會將數據設為“最好的能夠數據”而不報錯,如:
/數字 設為:0/能夠最小值/能夠最年夜值
/字符串 設為:空串/可以或許存儲的最年夜容量字符串
/表達式 設為:前往一個可用值(1/0-null)
所以,處理方法是:一切列都要采取默許值,這對機能也好。
mysql_mode的具體描寫:
在mysql 5中,默許的是REAL_AS_FLOAT,PIPES_AS_CONTACT,ANSI_QUOTES,GNORE_SPACE和ANSI,
在這類形式下,許可拔出跨越字段長度的值,只是拔出後,前往的是正告而不是毛病,當用STRICT_TRANS_TABLES時,
則是毛病了,嚴厲的正告.
NO_AUTO_CREATE_USER
避免GRANT主動創立新用戶,除非還指定了暗碼。
上面是手冊中的一些引見
上面描寫了支撐的一切形式:
· ALLOW_INVALID_DATES
在嚴厲形式下不要檢討全體日期。只檢討1到12之間的月份和1到31之間的 日。這在Web運用法式中,當你從三個分歧的字段獲得年、月、日,而且想要確實保留用戶拔出的內容(不停止日期驗證)時很主要。該形式實用於DATE和 DATETIME列。不合適TIMESTAMP列,TIMESTAMP列須要驗證日期。
啟用嚴厲形式後,辦事器須要正當的月和日,不只僅是分離在1到12和1到31規模內。例如,禁用嚴厲形式時'2004-04-31′是正當的,但啟用嚴厲形式後長短法的。要想在嚴厲形式許可遮蔽固定日期,還應啟用ALLOW_INVALID_DATES。
· ANSI_QUOTES
將‘”'視為辨認符引號(‘`'引號字符),不要視為字符串的引號字符。在ANSI形式,你可以依然應用‘`'來援用辨認符。啟用ANSI_QUOTES後,你不克不及用雙引號來援用字符串,由於它被說明為辨認符。
· ERROR_FOR_DIVISION_BY_ZERO
在嚴厲形式,在INSERT或UPDATE進程中,假如被零除(或 MOD(X,0)),則發生毛病(不然為正告)。假如未給出該形式,被零除時MySQL前往NULL。假如用到INSERT IGNORE或UPDATE IGNORE中,MySQL生成被零除正告,但操作成果為NULL。
· HIGH_NOT_PRECEDENCE
NOT 操作符的優先次序是表達式例如NOT a BETWEEN b AND c被說明為NOT (a BETWEEN b AND c)。在一些舊版本MySQL中, 表達式被說明為(NOT a) BETWEEN b AND c。啟用HIGH_NOT_PRECEDENCESQL形式,可以取得之前的更高優先級的成果。
mysql>SET sql_mode = ‘';
mysql>SELECT NOT 1 BETWEEN -5 AND 5;
-> 0
mysql>SET sql_mode = ‘broken_not';
mysql>SELECT NOT 1 BETWEEN -5 AND 5;
-> 1
· IGNORE_SPACE
許可函數名和‘('之間有空格。強迫將一切函數名視為保留的字。成果是,假如你想要拜訪保留為字的數據庫、表或列名,你必需援用它。例如,由於有USER()函數,mysql數據庫中的user表名和該表內的User列被保留上去,是以你必需援用它們:
SELECT "User" FROM mysql."user";
· NO_AUTO_CREATE_USER
避免GRANT主動創立新用戶,除非還指定了暗碼。
· NO_AUTO_VALUE_ON_ZERO
NO_AUTO_VALUE_ON_ZERO影響AUTO_INCREMENT列的處置。普通情形,你可以向該列拔出NULL或0生成下一個序列號。NO_AUTO_VALUE_ON_ZERO禁用0,是以只要NULL可以生成下一個序列號。
假如將0保留到表的AUTO_INCREMENT列,該形式會很有效。(不推舉采取該通例)。例如,假如你用mysqldump轉儲表偏重載,MySQL碰到0值普通會生成新的序列號,生成的表的內容與轉儲的表分歧。重載轉儲文件前啟用NO_AUTO_VALUE_ON_ZERO可以處理該成績。mysqldump在輸入中主動包含啟用NO_AUTO_VALUE_ON_ZERO的語句。
· NO_BACKSLASH_ESCAPES
禁用反斜線字符(‘')做為字符串內的加入字符。啟用該形式,反斜線則成為通俗字符。
· NO_DIR_IN_CREATE
創立表時,疏忽一切INDEX DIRECTORY和DATA DIRECTORY指令。該選項對從復禮服務器有效。
· NO_ENGINE_SUBSTITUTION
假如須要的存儲引擎被禁用或未編譯,可以避免主動調換存儲引擎。
· NO_FIELD_OPTIONS
不要在SHOW CREATE TABLE的輸入中打印MySQL公用列選項。該形式在可移植形式(portability mode)下用於mysqldump。
· NO_KEY_OPTIONS
不要在SHOW CREATE TABLE的輸入中打印MySQL公用索引選項。該形式在可移植形式(portability mode)下用於mysqldump。
· NO_TABLE_OPTIONS
不要在SHOW CREATE TABLE的輸入中打印MySQL公用表選項(例如ENGINE)。該形式在可移植形式(portability mode)下用於mysqldump。
· NO_UNSIGNED_SUBTRACTION
在減運算中,假如某個操作數沒有符號,不要將成果標志為UNSIGNED。請留意如許使UNSIGNED BIGINT不克不及100%用於高低文中。 · NO_ZERO_DATE
在嚴厲形式,不要將 ‘0000-00-00′做為正當日期。你依然可以用IGNORE選項拔出零日期。在非嚴厲形式,可以接收該日期,但會生成正告。
· NO_ZERO_IN_DATE
在嚴厲形式,不接收月或日部門為0的日期。假如應用IGNORE選項,我們為相似的日期拔出'0000-00-00′。在非嚴厲形式,可以接收該日期,但會生成正告。
· ONLY_FULL_GROUP_BY
不要讓GROUP BY部門中的查詢指向未選擇的列。
· PIPES_AS_CONCAT
將||視為字符串聯接操作符(+)(同CONCAT()),而不視為OR。
· REAL_AS_FLOAT
將REAL視為FLOAT的同義詞,而不是DOUBLE的同義詞。
· STRICT_TRANS_TABLES
為一切存儲引擎啟用嚴厲形式。不法數據值被謝絕。前面有具體解釋。
· STRICT_TRANS_TABLES
為事務存儲引擎啟用嚴厲形式,也能夠為非事務存儲引擎啟用嚴厲形式。前面有具體解釋。
嚴厲形式掌握MySQL若何處置不法或喪失的輸出值。有幾種緣由可使一個值為不法。例如,數據類型毛病,不合適列,或超越規模。當新拔出的行不包括某列的沒有顯示界說DEFAULT子句的值,則該值被喪失。
關於事務表,當啟用STRICT_ALL_TABLES或STRICT_TRANS_TABLES形式時,假如語句中有不法或喪失值,則會湧現毛病。語句被廢棄並轉動。
關於非事務表,假如拔出或更新的第1行湧現壞值,兩種形式的行動雷同。語句被廢棄,表堅持不變。假如語句拔出或修正多行,而且壞值湧現在第2或前面的行,成果取決於啟用了哪一個嚴厲選項:
· 關於STRICT_ALL_TABLES,MySQL前往毛病並疏忽殘剩的行。然則,在這類情形下,後面的行曾經被拔出或更新。這解釋你可以部門更新,這能夠不是你想要的。要防止這點,最好應用單行語句,由於如許可以不更改表便可以廢棄。
· 關於STRICT_TRANS_TABLES,MySQL將不法值轉換為最接近該列的正當值並拔出調劑後的值。假如值喪失,MySQL在列中拔出隱式默許值。在任何情形下,MySQL都邑生成正告而不是給失足誤並持續履行語句。描寫了隱式默許值。
嚴厲形式不許可不法日期,例如'2004-04-31′。它不許可制止日期應用“零”部門,例如'2004-04-00′或“零”日期。要想制止,應在嚴厲形式基本上,啟用NO_ZERO_IN_DATE和NO_ZERO_DATE SQL形式。
假如你不應用嚴厲形式(即不啟用STRICT_TRANS_TABLES或STRICT_ALL_TABLES形式),關於不法或喪失的值,MySQL將拔出調劑後的值並給出正告。在嚴厲形式,你可以經由過程INSERT IGNORE或UPDATE IGNORE來完成。
上面的特別形式疾速組合了後面所列的形式。
個中包含年夜多半最新版本MySQL中的一切形式值。舊版本中,組合形式不包含新版本中沒有的不實用的詳細形式值。
· ANSI
同等REAL_AS_FLOAT、PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE。
· DB2
同等PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、NO_FIELD_OPTIONS。
· MAXDB
同等PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、NO_FIELD_OPTIONS、 NO_AUTO_CREATE_USER。
· MSSQL
同等PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、 NO_FIELD_OPTIONS。
· MYSQL323
同等NO_FIELD_OPTIONS、HIGH_NOT_PRECEDENCE。
· MYSQL40
同等NO_FIELD_OPTIONS、HIGH_NOT_PRECEDENCE。
· ORACLE
同等PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、NO_FIELD_OPTIONS、NO_AUTO_CREATE_USER。
· POSTGRESQL
同等PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、NO_FIELD_OPTIONS。
· TRADITIONAL
同等STRICT_TRANS_TABLES、STRICT_ALL_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER