1.一般默認情況下sql_mode默認為空,也就是不嚴格的sql檢查 2.如果sql_mode為空的情況下,測試: create table tt3 (name char(2)); //定義一個name字段長度為定長2的tt3表 insert into tt3 values ('wo'); //正常插入,無措 insert into tt3 values ('woshi'); //正常插入,但值已被截取成了“wo” 修改sql_mode為嚴格模式: set session sql_mode = 'STRICT_TRANS_TABLES'; insert into tt3 values ('woshi'); //報錯:ERROR 1406 (22001): Data too long for column 'name' at row 1 也就是說嚴格情況下,是嚴格控制字段輸入值的長度的 3.set session sql_mode = 'STRICT_TRANS_TABLES'; 本次連接生效 set global sql_mode = 'STRICT_TRANS_TABLES'; 本次連接不生效,新的連接生效 4.set session sql_mode = 'NO_BACKSLASH_ESCAPES'; 開啟後,斜槓將會被當作字符串插入 比如 insert into tt3 values ('\1'); ,開啟之前插入"1",開啟之後插入"\1"; 5.set session sql_mode = 'PIPES_AS_CONCAT'; 開啟後,||將被當做連接符 比如 select "beijing"||2008; 開啟之前返回1,(進行或運算),開啟之後返回"beijin2008" 6.常見的sql_mode ANSI::更接近標准的sql STRICT_TRANS_TABLES::嚴格模式,不允許非法日期,不允許超出字段長度定義的值 TRADITIONAL::嚴格模式,插入不正確的值將直接報錯,一般可用在事務的時候