MySQL配置文件的sql_mode模式

本文介绍了MySQL数据库中的sql_mode环境变量,包括如何查看当前设置、三种模式(ANSI、TRADITIONAL和STRICT_TRANS_TABLES)的区别及应用示例,并提供了修改配置的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、sql_mode模式 
mysql数据库的中有一个环境变量sql_mode,定义了mysql应该支持的sql语法,数据校验等!

1.查看sql_mode。

mysql> select @@sql_mode;

 

mysql> show variables like sql_mode%\G;

 

2.模式区别。

mysql5.0以上版本支持三种sql_mode模式:ANSI、TRADITIONAL和STRICT_TRANS_TABLES。 
ANSI模式:宽松模式,对插入数据进行校验,如果不符合定义类型或长度,对数据类型调整或截断保存,报warning警告。 
TRADITIONAL模式:严格模式,当向mysql数据库插入数据时,进行数据的严格校验,保证错误数据不能插入,报error错误。用于事物时,会进行事物的回滚。 
STRICT_TRANS_TABLES模式:严格模式,进行数据的严格校验,错误数据不能插入,报error错误。 

 

a.ANSI模式。

1. mysql> set @@sql_mode=ANSI;  

2. Query OK, 0 rows affected (0.00 sec)  

3.   

4. mysql> create table test(name varchar(4), pass varchar(4));  

5. Query OK, 0 rows affected (0.03 sec)  

6.   

7. mysql> insert into test values('aaaaa','aaaaa'),('bbbb','bbbb');  

8. Query OK, 2 rows affected, 2 warnings (0.02 sec)  

9. Records: 2  Duplicates: 0  Warnings: 2  

10.   

11. mysql> show warnings;  

12. +---------+------+-------------------------------------------+  

13. | Level   | Code | Message                                   |  

14. +---------+------+-------------------------------------------+  

15. | Warning | 1265 | Data truncated for column 'name' at row 1 |  

16. | Warning | 1265 | Data truncated for column 'pass' at row 1 |  

17. +---------+------+-------------------------------------------+  

18. 2 rows in set (0.00 sec)  

19.   

20. mysql> select * from test;  

21. +------+------+  

22. | name | pass |  

23. +------+------+  

24. | aaaa | aaaa |  

25. | bbbb | bbbb |  

26. +------+------+  

27. 2 rows in set (0.00 sec)

 

 

b.TRADITIONAL模式

 

1. mysql> set @@sql_mode=TRADITIONAL;  

2. Query OK, 0 rows affected (0.00 sec)  

3.   

4. mysql> create table test(name varchar(4), pass varchar(4));  

5. Query OK, 0 rows affected (0.02 sec)  

6.   

7. mysql> insert into test values('aaaaa','aaaaa'),('bbbb','bbbb');  

8. ERROR 1406 (22001): Data too long for column 'name' at row 1  

9.   

10. mysql> show errors;  

11. +-------+------+------------------------------------------+  

12. | Level | Code | Message                                  |  

13. +-------+------+------------------------------------------+  

14. | Error | 1406 | Data too long for column 'name' at row 1 |  

15. +-------+------+------------------------------------------+  

16. 1 row in set (0.00 sec)  

17.   

18. mysql> select * from test;  

19. Empty set (0.00 sec)

 

 

c.STRICT_TRANS_TABLES模式

 

1. mysql> set @@sql_mode=STRICT_TRANS_TABLES;  

2. Query OK, 0 rows affected (0.00 sec)  

3.   

4. mysql> create table test(name varchar(4), pass varchar(4));  

5. Query OK, 0 rows affected (0.02 sec)  

6.   

7. mysql> insert into test values('aaaaa','aaaaa'),('bbbb','bbbb');  

8. ERROR 1406 (22001): Data too long for column 'name' at row 1  

9.   

10. mysql> show errors;  

11. +-------+------+------------------------------------------+  

12. | Level | Code | Message                                  |  

13. +-------+------+------------------------------------------+  

14. | Error | 1406 | Data too long for column 'name' at row 1 |  

15. +-------+------+------------------------------------------+  

16. 1 row in set (0.00 sec)  

17.   

18. mysql> select * from test;  

19. Empty set (0.00 sec)

 

 

3.修改配置文件。

[mysqld]

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值