mysql修改sql_mode為寬松模式


sql_mode

  • ANSI
  • TRADITIONAL
  • STRICT_TRANS_TABLES

sql_mode為空

最寬松的模式, 即使有錯誤既不會報錯也不會有警告⚠️

ANSI

寬松模式,對插入數據進行校驗,如果不符合定義類型或長度,對數據類型調整或截斷保存,報warning警告

TRADITIONAL

嚴格模式,當向mysql數據庫插入數據時,進行數據的嚴格校驗,保證錯誤數據不能插入,報error錯誤。用於事物時,會進行事物的回滾

STRICT_TRANS_TABLES

嚴格模式,進行數據的嚴格校驗,錯誤數據不能插入,報error錯誤

NO_ENGINE_SUBSTITUTION

no_engine_subtitution的作用:mysql 在create table 時可以指定engine子句(指定存儲引擎),如果把引擎指定成一個並不存在的引擎, 這個時候mysql可以有兩種行為供選擇

  • 直接報錯
  • 把表的存儲引擎替換成innodb

如果 sql_mode 存在 no_engine_subtitution 的時候 ===> 直接報錯

如果 sql_mode 不存在 no_engine_subtitution 的時候 ===> 把表的存儲引擎替換成innodb

查詢 sql_mode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
mysql>  select @@sql_mode;
+------------------------+
| @@sql_mode |
+------------------------+
| NO_ENGINE_SUBSTITUTION |
+------------------------+
1 row in set (0.00 sec)

mysql> select @@global.sql_mode;
+------------------------+
| @@global.sql_mode |
+------------------------+
| NO_ENGINE_SUBSTITUTION |
+------------------------+
1 row in set (0.00 sec)

mysql> select @@session.sql_mode;
+------------------------+
| @@session.sql_mode |
+------------------------+
| NO_ENGINE_SUBSTITUTION |
+------------------------+
1 row in set (0.00 sec)

在線修改 sql_mode

SET [GLOBAL|SESSION] sql_mode='modes'

當前 session 生效

1
mysql> set sql_mode=`NO_FIELD_OPTIONS,HIGH_NOT_PRECEDENCE`;

全局生效

1
mysql> set global sql_mode=`NO_FIELD_OPTIONS,HIGH_NOT_PRECEDENCE`

離線修改 sql_mode

1
2
3
➜  ~ vim /etc/my.cnf

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM