16 SQL Mode

1.SQL Mode解決的問題:
    a.經過設置SQL Mode , 能夠完成不一樣嚴格程度的數據校驗,有效地保障數據準確性.
    b.經過設置SQL Mode 爲ANSI模式,來保證大多數SQL符合標準的SQL語法,應用在不一樣數據庫之間遷移時,對業務SQL進行的修改較小.
    
 
2.MySQL SQL Mode
    
    MySQL5.0上,默認SQL Mode(參數)爲: REAL_AS_FLOAT , PIPES_AS_CONCAT, ANSI_QUOTES , GNORE_SPACE , ANSI .
    這種模式下,容許插入超過字段長度的值,只是在插入後,MySQL會返回一個Warning.
    經過修改SQL Mode 爲 STRICT_TRANS_TABLES(嚴格模式),進行嚴格的數據校驗,使得錯誤數據不能插入表中,從而保證數據的準確性.
 
    1).查看SQL Mode 命令
        SELECT @@sql_mode ;
 
    2).設置SQL Mode
        SET [SESSION|GLOBAL] sql_mode = 'xx_mode' ;
        
        其中,SESSION :  只在本次鏈接中生效;
        GLOBAL : 表示本次鏈接不生效,而對於新的鏈接則生效.
 
        另外能夠在MySQL啓動時,經過 --sql-mode="xx_mode" 來設置SQL Mode ;
 
 
3.SQL Mode 常見功能
    
    1).校驗日期的合法性
        嚴格模式下 , 若是不合法,則報錯;例如4月沒有31日,這樣的數據沒法插入.
        非嚴格模式下, 會插入一條 0000-00-00 00:00:00 的數據
 
    2).INSERT/UPDATE過程當中
        嚴格模式下 MOD(x,0) 這種會報錯;
        非嚴格模式下 會插入 null
 
    3).NO_BACKSLASH_ESCAPES 模式
        導入數據時,若是數據中含有反斜線字符,啓用NO_BACKSLASH_ESCAPES模式來保證數據的正確性,是個不錯的選擇.
    
    4).PIPES_AS_CONCAT模式
        其餘數據庫,如Oracle使用 || 做爲字符串鏈接符,這樣的SQL正常狀況下在 MySQL中沒法執行, 爲了解決這個問題 , MySQL 提供了 PIPES_AS_CONCAT 模式.
 
 
 
4.經常使用的SQL Mode
    1).ANSI
        等同於 REAL_AS_FLOAT , PIPES_AS_CONCAT , ANSI_QUOTES , IGNORE_SPACE 和ANSI組合模式 , 使語法和行爲更符合標準SQL.
 
    2).STRICT_TRANS_TABLES
        嚴格模式
 
    3)TRADITIONAL
        等同於 STRICT_TRANS_TABLES , STRICT_ALL_TABLES , NO_ZERO_IN_DATE , NO_ZERO_DATE , ERROR_FOR_DIVISION_BY_ZERO , TRADITIONAL , NO_AUTO_CREATE_USER 組合模式 , 因此它也是嚴格模式.
 
 
 
 
4.SQL Mode 在數據遷移中的使用
    1) 各類異構數據庫在MySQL中的SQL Mode組合
        
        
 
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
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
 
    NO_TABLE_OPTIONS : 能夠去掉建表語句中的 table options, 例如engine的設置, 這種模式下 , 能夠得到通用的建表腳本.
相關文章
相關標籤/搜索