久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

MYSQL 中STRICT

159次閱讀
沒有評論

共計 5735 個字符,預計需要花費 15 分鐘才能閱讀完成。

MYSQL 中 STRICT_TRANS_TABLES 如何使用,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

MYSQL STRICT_TRANS_TABLES 使用圖解教程
 
mysql 在 insert 的時候,常常提示沒有默認值,MySQL 1364 錯誤提示:#1364 – Field XXX doesn t have a default value。XXX 字段沒有默認的數值;也就是說我們沒有為其分配數值,而表中此字段也沒有設置默認值。這是 mysql 模式開啟存儲引擎啟用嚴格模式,非法數據值被拒絕,我把操作實際問題貼一下圖:

 
而我的 Tbl_User 表里面字段:
   www.2cto.com  

 
解決方法:就是在 mysql 的配置文件 my.ini 里面
 
XML/HTML 代碼
01.# Set the SQL mode to strict # sql-mode= STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION  
02. 改為: 
03. 
04.sql-mode= NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION  
 
把嚴格模式去掉, 得啟 mysql 即可
 
貼一下網上有關模式詳細介紹:
NO_AUTO_CREATE_USER
  www.2cto.com  
防止 GRANT 自動創建新用戶,除非還指定了密碼。
NO_UNSIGNED_SUBTRACTION 
在減運算中,如果某個操作數沒有符號,不要將結果標記為 UNSIGNED。請注意這樣使 UNSIGNED BIGINT 不能 100% 用于上下文中。
 
再貼一下其它幾種模式:
在 mysql 5 中, 默認的是 REAL_AS_FLOAT,PIPES_AS_CONTACT,ANSI_QUOTES,GNORE_SPACE 和 ANSI,
在這種模式下, 允許插入超過字段長度的值, 只是插入后, 返回的是警告而不是錯誤, 當用 STRICT_TRANS_TABLES 時,
則是錯誤了, 嚴格的警告.
 
NO_AUTO_CREATE_USER
 
防止 GRANT 自動創建新用戶,除非還指定了密碼。
下面是手冊中的一些介紹
 
下面描述了支持的所有模式:
middot; ALLOW_INVALID_DATES
 
在嚴格模式下不要檢查全部日期。只檢查 1 到 12 之間的月份和 1 到 31 之間的 日。這在 Web 應用程序中,當你從三個不同的字段獲取年、月、日,并且想要確切保存用戶插入的內容 (不進行日期驗證) 時很重要。該模式適用于 DATE 和 DATETIME 列。不適合 TIMESTAMP 列,TIMESTAMP 列需要驗證日期。
 
啟用嚴格模式后,服務器需要合法的月和日,不僅僅是分別在 1 到 12 和 1 到 31 范圍內。例如,禁用嚴格模式時 rsquo;2004-04-31 prime; 是合法的,但啟用嚴格模式后是非法的。要想在嚴格模式允許遮掩固定日期,還應啟用 ALLOW_INVALID_DATES。
  www.2cto.com  
middot; ANSI_QUOTES
 
將 lsquo;”rsquo; 視為識別符引號 (lsquo;` rsquo; 引號字符),不要視為字符串的引號字符。在 ANSI 模式,你可以仍然使用 lsquo;` rsquo; 來引用識別符。啟用 ANSI_QUOTES 后,你不能用雙引號來引用字符串,因為它被解釋為識別符。
 
middot; ERROR_FOR_DIVISION_BY_ZERO
 
在嚴格模式,在 INSERT 或 UPDATE 過程中,如果被零除 (或 MOD(X,0)),則產生錯誤(否則為警告)。如果未給出該模式,被零除時 MySQL 返回 NULL。如果用到 INSERT IGNORE 或 UPDATE IGNORE 中,MySQL 生成被零除警告,但操作結果為 NULL。
 
middot; 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 = lsquo; rsquo;; mysql SELECT NOT 1 BETWEEN -5 AND 5; – 0 mysql SET sql_mode = lsquo;broken_not rsquo;; mysql SELECT NOT 1 BETWEEN -5 AND 5; – 1 
middot; IGNORE_SPACE
 
允許函數名和 lsquo;(rsquo; 之間有空格。強制將所有函數名視為保存的字。結果是,如果你想要訪問保存為字的、表或列名,你必須引用它。例如,因為有 USER()函數,數據庫中的 user 表名和該表內的 User 列被保存下來,因此你必須引用它們:
SELECT User FROM mysql. user  
middot; NO_AUTO_CREATE_USER
 
防止 GRANT 自動創建新用戶,除非還指定了密碼。
  www.2cto.com  
middot; 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 的語句。
 
middot; NO_BACKSLASH_ESCAPES
禁用反斜線字符 (lsquo; rsquo;) 做為字符串內的退出字符。啟用該模式,反斜線則成為普通字符。
 
middot; NO_DIR_IN_CREATE
創建表時,忽視所有 INDEX DIRECTORY 和 DATA DIRECTORY 指令。該選項對從復制服務器有用。
 
middot; NO_ENGINE_SUBSTITUTION
如果需要的存儲引擎被禁用或未編譯,可以防止自動替換存儲引擎。
 
middot; NO_FIELD_OPTIONS
不要在 SHOW CREATE TABLE 的輸出中打印 MySQL 專用列選項。該模式在可移植模式(portability mode)下用于 mysqldump。
 
middot; NO_KEY_OPTIONS
 
不要在 SHOW CREATE TABLE 的輸出中打印 MySQL 專用索引選項。該模式在可移植模式(portability mode)下用于 mysqldump。
 
middot; NO_TABLE_OPTIONS
  www.2cto.com  
不要在 SHOW CREATE TABLE 的輸出中打印 MySQL 專用表選項(例如 ENGINE)。該模式在可移植模式(portability mode)下用于 mysqldump。
 
middot; NO_UNSIGNED_SUBTRACTION
 
在減運算中,如果某個操作數沒有符號,不要將結果標記為 UNSIGNED。請注意這樣使 UNSIGNED BIGINT 不能 100% 用于上下文中。middot; NO_ZERO_DATE
 
在嚴格模式,不要將 lsquo;0000-00-00 prime; 做為合法日期。你仍然可以用 IGNORE 選項插入零日期。在非嚴格模式,可以接受該日期,但會生成警告。
 
middot; NO_ZERO_IN_DATE
 
在嚴格模式,不接受月或日部分為 0 的日期。如果使用 IGNORE 選項,我們為類似的日期插入 rsquo;0000-00-00 prime;。在非嚴格模式,可以接受該日期,但會生成警告。
 
middot; ONLY_FULL_GROUP_BY
 
不要讓 GROUP BY 部分中的查詢指向未選擇的列。
 
middot; PIPES_AS_CONCAT
 
將 || 視為字符串連接操作符(+)(同 CONCAT()),而不視為 OR。
 
middot; REAL_AS_FLOAT
 
將 REAL 視為 FLOAT 的同義詞,而不是 DOUBLE 的同義詞。
 
middot; STRICT_TRANS_TABLES
 
為所有存儲引擎啟用嚴格模式。非法數據值被拒絕。
 
middot; STRICT_TRANS_TABLES
 
為事務存儲引擎啟用嚴格模式,也可能為非事務存儲引擎啟用嚴格模式。后面有詳細說明。
 
嚴格模式控制 MySQL 如何處理非法或丟失的輸入值。有幾種原因可以使一個值為非法。例如,數據類型錯誤,不適合列,或超出范圍。當新插入的行不包含某列的沒有顯示定義 DEFAULT 子句的值,則該值被丟失。 www.2cto.com  
 
對于事務表,當啟用 STRICT_ALL_TABLES 或 STRICT_TRANS_TABLES 模式時,如果語句中有非法或丟失值,則會出現錯誤。語句被放棄并滾動。
 
對于非事務表,如果插入或更新的第 1 行出現壞值,兩種模式的行為相同。語句被放棄,表保持不變。如果語句插入或修改多行,并且壞值出現在第 2 或后面的行,結果取決于啟用了哪個嚴格選項:
 
middot; 對于 STRICT_ALL_TABLES,MySQL 返回錯誤并忽視剩余的行。但是,在這種情況下,前面的行已經被插入或更新。這說明你可以部分更新,這可能不是你想要的。要避免這點,最好使用單行語句,因為這樣可以不更改表即可以放棄。
 
middot; 對于 STRICT_TRANS_TABLES,MySQL 將非法值轉換為最接近該列的合法值并插入調整后的值。如果值丟失,MySQL 在列中插入隱式默認值。在任何情況下,MySQL 都會生成警告而不是給出錯誤并繼續執行語句。描述了隱式默認值。
 
嚴格模式不允許非法日期,例如 rsquo;2004-04-31 prime;。它不允許禁止日期使用“零”部分,例如 rsquo;2004-04-00 prime; 或“零”日期。要想禁止,應在嚴格模式基礎上,啟用 NO_ZERO_IN_DATE 和 NO_ZERO_DATE SQL 模式。
  www.2cto.com  
如果你不使用嚴格模式 (即不啟用 STRICT_TRANS_TABLES 或 STRICT_ALL_TABLES 模式),對于非法或丟失的值,MySQL 將插入調整后的值并給出警告。在嚴格模式,你可以通過 INSERT IGNORE 或 UPDATE IGNORE 來實現。
 
下面的特殊模式快速組合了前面所列的模式。
 
其中包括大多數最新版本 MySQL 中的所有模式值。舊版本中,組合模式不包括新版本中沒有的不適用的具體模式值。
 
等同 REAL_AS_FLOAT、PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE。
 
middot;
 
等同 PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、NO_FIELD_OPTIONS。
 
middot; MAXDB
 
等同 PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、NO_FIELD_OPTIONS、NO_AUTO_CREATE_USER。
 
middot; MSSQL
 
等同 PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、NO_FIELD_OPTIONS。
 
middot; MYSQL323
 
等同 NO_FIELD_OPTIONS、HIGH_NOT_PRECEDENCE。
 
middot; MYSQL40
  www.2cto.com  
等同 NO_FIELD_OPTIONS、HIGH_NOT_PRECEDENCE。
 
middot; ORACLE
 
等同 PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、NO_FIELD_OPTIONS、NO_AUTO_CREATE_USER。
 
middot; POSTGRESQL
 
等同 PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、NO_FIELD_OPTIONS。
 
middot; TRADITIONAL
 
等同 STRICT_TRANS_TABLES、STRICT_ALL_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER
 
(二)sql 代碼
1.select @@sql_mode; 
2. 
3.CREATE TABLE `t` ( 
4. `name` varchar(20), 
5. `email` varchar(40) 
6.);   www.2cto.com  
7.desc t; 
8. 
9.set session sql_mode= REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI  
10. 
11.insert into t(`name`, `email`) values(12345678901234567890999999 , beijing2008@126.com  
12. 
13.set session sql_mode= STRICT_TRANS_TABLES  

看完上述內容,你們掌握 MYSQL 中 STRICT_TRANS_TABLES 如何使用的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注丸趣 TV 行業資訊頻道,感謝各位的閱讀!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-01發表,共計5735字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 临高县| 修文县| 灌南县| 宜兰市| 曲靖市| 房山区| 鲜城| 密云县| 嘉义县| 乌恰县| 绥江县| 宜阳县| 临城县| 岳阳市| 深州市| 咸丰县| 东宁县| 桂东县| 西乡县| 奈曼旗| 夏邑县| 阿克陶县| 柘荣县| 四川省| 平罗县| 专栏| 沽源县| 平顺县| 军事| 山阳县| 石嘴山市| 威信县| 恩平市| 明光市| 如东县| 山阳县| 上犹县| 彩票| 蒙阴县| 河曲县| 泸定县|