MySQL sql_mode参数详解
一、MySQL sql_mode介绍
MySQL sql_mode是一组MySQL的语法校验规则,定义了MySQL应该支持的SQL语法、数据校验等。
1.1 MySQL5.6官网介绍与可选参数
https://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_sql_mode
1.2 MySQL5.7官网介绍与可选参数
https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_sql_mode
1.3 MySQL8.0官网介绍与可选参数
https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_sql_mode
二、MySQL sql_mode的四种模式:宽松模式、严格模式
2.1 参数解读
mysql支持的sql_mode模式:ANSI、TRADITIONAL、STRICT_ALL_TABLES和STRICT_TRANS_TABLES。
- ANSI模式:宽松模式,对插入数据进行校验,如果不符合定义类型或长度,对数据类型调整或截断保存,报warning警告。
- TRADITIONAL模式:严格模式,当向mysql数据库插入数据时,进行数据的严格校验,保证错误数据不能插入,报error错误。用于事物时,会进行事物的回滚。
- STRICT_TRANS_TABLES模式:严格模式,进行数据的严格校验,错误数据不能插入,报error错误。只对支持事务的表有效。
- STRICT_ALL_TABLES模式:严格模式,进行数据的严格校验,错误数据不能插入,报error错误。对所有表都有效。
2.2 业务案例阐述
问题描述:添加一个超长的文章的时候,文章内容字段被MySQL截取后插入,导致文章内容不完整。(ANSI模式即宽松模式)
debug:经排查确认业务程序插入的SQL没有问题。
问题原因:MySQL使用了松散模式,造成自动截取。给debug带来困难
解决办法:
1、开启MySQL 严格模式,对开发有好处;
2、更换MySQL的字段类型,减少被截断的概率。
参考:MySQL中和text相关的类型最大长度限制,请根据业务类型进行合理选择:
- TINYTEXT 最大长度是 255 (2^8 – 1) 个字符。
- TEXT 最大长度是 65535 (2^16 – 1) 个字符。
- MEDIUMTEXT 最大长度是 16777215 (2^24 – 1) 个字符。
- LONGTEXT 最大长度是 4294967295 (2^32 – 1) 个字符。
作者:UStarGao
链接:https://www.starcto.com/mysql/292.html
来源:STARCTO
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
UCloud云平台推荐
随便看看
- 2021-05-29MySQL ibdata1共享表空间
- 2021-03-18Linux入侵检测AIDE-检查文件的完整性
- 2021-04-03Linux使用PaPing进行TCP端口连通性/网络平均延迟探测
- 2021-10-28PostgreSQL日志轮滚配置教程
- 2024-09-03UCloud UHost自建K8S集群如何使用基础云产品ULB负载均衡