Mysql的sql_mode

來源:互聯網
上載者:User

標籤:問題:   問題   啟用   ash   esc   false   history   rtt   error   

(一) 基本介紹

set sql_mode="",即強制不設定MySql模式(如不作輸入檢測、錯誤提示、文法模式檢查等)應該能提高效能,但有如下問題: 

如果插入了不合適資料(錯誤類型或超常),mysql會將資料設為“最好的可能資料”而不報錯,如: 

/數字 設為:0/可能最小值/可能最大值 

/字串 設為:空串/能夠儲存的最大容量字串 

/運算式 設為:返回一個可用值(1/0-null) 

所以,解決辦法是:所有列都要採用預設值,這對效能也好。 

當然,如果你特別喜歡sqlserver的模式,也可以設定為sql_mod="sqlserver"(好像是這麼寫的),這樣mysql就按sqlserver的方式運作了,建議不要如此。

(二) 常見方式

mysql可以運行在不同sql mode模式下面,sql mode模式定義了mysql應該支援的sql文法,資料校正等! 

查看預設的sql mode模式: 

select @@sql_mode;

我的資料庫是: 

STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

在此模式下面,如果插入的資料的長度大於定義的長度,那麼就會報錯! 

set session sql_mode=‘REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI‘;

在這種模式下面:插入的資料的長度大於定義的時候,就會截取,並警告,但是可以插入進去 

session表示只在本次中有效 

global:表示在本次串連中不生效,而對於新的串連就生效 

啟用NO_BACKSLASH_ESCAPES模式,使反斜線成為一般字元,在匯入資料時候,如果資料中有反斜線,啟用這個模式是個不錯的選擇   

啟用PIPES_AS_CNCAT模式,將||看成是一般字元串

sql mode值  說明

ANSI 

‘REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE和ANSI組合‘,

這種模式使文法   和行為更   符合標準的sql

STRICT_TRANS_TABLES          使用與事務和非事務表,strict 模式 

TRADITIONAL               也是strict 模式,對於插入不正確的值給出錯誤而不是警告。用在事務時,只要發生錯誤就立即復原

(三) 修改sql_mode 解決問題

今天安裝了個mysql5.0,拿了一個很久之前網上下的程式檢查一下是否工作正常.

發現以前的程式居然不能正常運行,提示資訊如下:

Database error: Invalid SQL: INSERT INTO Survey_UserHistory(userId,jobId,type,action,startTime,endTime) VALUES(’17′,”,’User’,‘Login’,”,’2008-11-23 14:33:56′)

MySQL error: 1366 (Incorrect integer value: ” for column ‘jobId’ at row 1)

Session halted.

第一時間的反應是跟mysql5.0新加的sql-mode有關係,因為前一陣子剛剛看過手冊.果然,作了如下更改後就不再提示了.

修改 my.ini 檔案.

# Set the SQL mode to strictsql-mode=”STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION”

改為:

# Set the SQL mode to strictsql-mode=”NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION”

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.