资讯专栏INFORMATION COLUMN

MySQL sql_mode参数详解

社区管理员 / 635人阅读

一、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

image.png

1.2 MySQL5.7官网介绍与可选参数

image.png

https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_sql_mode1.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) 个字符。


文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/128120.html

相关文章

  • MySQL】explicit_defaults_for_timestamp 参数详解

    摘要:本文主要介绍该参数打开和关闭情况下对的影响。在不同环境间,此参数建议统一,不然可能出现程序在这个环境运行正常在另外一个环境却出现报错的情况。笔者了解到亚马逊实例该参数默认为,在环境迁移时要特别注意下该参数。 简介: explicit_defaults_for_timestamp 系统变量决定MySQL服务端对timestamp列中的默认值和NULL值的不同处理方法。此变量自MySQL ...

    W4n9Hu1 评论0 收藏0
  • MySQL sql_mode 说明(及处理一起 sql_mode 引发的问题)

    摘要:常用值说明官方手册专门有一节介绍。定义了两个方面应支持的语法,以及应该在数据上执行何种确认检查。数据检查类认为日期非法,与是否设置后面的严格模式有关。认为,相比直接报错终止,数据不一致问题更严重。 1. MySQL 莫名变成了 Strict SQL Mode 最近测试组那边反应数据库部分写入失败,app层提示是插入成功,但表里面里面没有产生数据,而两个写入操作的另外一个表有数据。因为 ...

    phodal 评论0 收藏0
  • Python 3 进阶 —— 使用 PyMySQL 操作 MySQL

    摘要:是一个纯实现的客户端操作库,支持事务存储过程批量执行等。插入数据元组或列表插入数据字典批量插入参考资料中操作的模块详解之的使用原文地址更多文章请访问我的个人博客 PyMySQL 是一个纯 Python 实现的 MySQL 客户端操作库,支持事务、存储过程、批量执行等。 PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Python MySQL 客户...

    myshell 评论0 收藏0
  • Python 3 进阶 —— 使用 PyMySQL 操作 MySQL

    摘要:是一个纯实现的客户端操作库,支持事务存储过程批量执行等。插入数据元组或列表插入数据字典批量插入参考资料中操作的模块详解之的使用原文地址更多文章请访问我的个人博客 PyMySQL 是一个纯 Python 实现的 MySQL 客户端操作库,支持事务、存储过程、批量执行等。 PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Python MySQL 客户...

    newtrek 评论0 收藏0
  • MySQL5.7应当注意的参数

    摘要:简介本篇文章主要介绍初始化应当注意的参数,对于不同环境间实例迁移,这些参数同样应当注意。注本文介绍的参数都是在配置文件部分。该参数指定的最大连接数,是全局变量可动态修改默认为。该参数控制是否大小写敏感,主要影响库名及表名。 简介: 本篇文章主要介绍 MySQL 初始化应当注意的参数,对于不同环境间实例迁移,这些参数同样应当注意。 注: 本文介绍的参数都是在配置文件 [mysqld] 部...

    Tony 评论0 收藏0

发表评论

0条评论

社区管理员

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<