当前位置: 首页 > news >正文

MySQL的sql_mode模式简介

前言

今天同事使用数据库时报错,排查问题时发现配置文件里的sql_mode配置被人注释了,所以通过查询资料对这个配置进行了下了解。

介绍

mysql为了支持在不同的环境下运行,允许我们给它设置不同的运行模式(sql_mode)。
不同的运行模式,mysql处理我们的sql语句也不相同(mysql提供了18个运行模式,它们可任意组合使用)。

sql model 常用来解决下面几类问题

  1. 通过设置sql mode, 可以完成不同严格程度的数据校验,有效地保障数据准备性。
  2. 通过设置sql model 为宽松模式,来保证大多数sql符合标准的sql语法,这样应用在不同数据库之间进行迁移时,则不需要对业务sql
    进行较大的修改。
  3. 在不同数据库之间进行数据迁移之前,通过设置SQL Mode 可以使MySQL 上的数据更方便地迁移到目标数据库中。

下面对18种运行模式进行简单介绍

1. STRICT_ALL_TABLES

控制是否所有的mysql存储引擎均开启严格模式,默认为OFF,建议ON;
严格模式开启后,mysql会对更改数据的行为做严格的校验,比如:日期的有效性等,一般和其他模式配合使用;

2. STRICT_TRANS_TABLES 严格模式

这个也是严格模式,不同的是上面的会对所有存储引擎开启严格模式,而这个会对所有支持事务引擎开启,并尽可能对非事务引擎开启。
默认为ON,建议ON;

3. ALLOW_INVALID_DATES

控制我们能否向date、datetime列插入2020-04-31这种数据(4月怎么会有31号呢?这是个非法数据)。
当OFF时,不能插入;
当ON时,能插入;
默认为OFF,建议OFF;

4. ANSI_QUOTES

是否将双引号也当做对象名称的标识,就像` 一样。
当为OFF时," 用来包裹字符串,不能表示表名和列名等;
当为ON时,"不能包裹字符串,但它可以包裹表名和列名等;

默认为OFF,建议OFF;在mysql中我们可以仅可以用`包裹对象标识名(当然也可以不包裹),单引号包裹字符串。

5. HIGH_NOT_PRECEDENCE

控制 NOT运算符是否具有更高的优先级。
当OFF时,select 1 between -5 and 5等同select not (1 between -5 and 5);
当ON时,select 1 between -5 and 5等同select (not 1) between -5 and 5;
默认为OFF,建议OFF;

6. IGNORE_SPACE

控制是否忽略函数名和(之间的空格。
当OFF时,函数名和(之间不能有空格;
当ON时,函数名和(之间可以有空格;
默认OFF,建议OFF;

7. NO_AUTO_VALUE_ON_ZERO

控制当把0插入到自增列时是否触发自增。
当为OFF时,将0或null插入到自增列都会触发自增;
当为ON时,将0插入到自增列不会触发自增,因为0会被当做正常数据对待,直接插入进去(插入null依然会触发自增);
默认为OFF,建议OFF;

8. NO_BACKSLASH_ESCAPES

控制是否将反斜杠识别为转义字符。
当为OFF时,反斜杠是转义字符;
当为ON时,反斜杠就是普通字符,不会对其后的字符转义,此时mysql中也就没有了转移字符;
默认为OFF,建议OFF;

9. NO_DIR_IN_CREATE

控制是否忽略create table时后面的 DATA DIRECTORY 和 INDEX DIRECTORY 声明。

DATA DIRECTORY 和 INDEX DIRECTORY 声明是当mysql的datedir存储空间不够时允许用户为新建的表指定新的存储地址,如:
CREATE TABLE t_1 engine=innodb DATA DIRECTORY=“/data/lottery/” INDEX DIRECTORY=“/data/lottery/”

当为OFF时,DATA DIRECTORY 和 INDEX DIRECTORY 继续有效;
当为ON时,DATA DIRECTORY 和 INDEX DIRECTORY 会被忽略;

默认为OFF,建议OFF;

10. NO_ENGINE_SUBSTITUTION

控制是否自动将用户建表时声明的不可用的存储引擎替换成可用的存储引擎。
比如:当我们建表时声明使用某一个存储引擎,但是由于服务器问题,这个引擎暂时不可用,那么此时mysql应该怎么做呢?

当为OFF时,mysql会使用可用的默认殷勤替代;
当为ON时,mysql会直接报错;

默认ON,建议ON;

11. NO_UNSIGNED_SUBTRACTION

控制当我们对unsigned int 等做减法时,是否将结果转为对应的非unsigned修饰的类型。
当为OFF时,unsigned int与int相减结果仍为unsigned int;
当为ON时,unsigned int与int相减结果为int;
默认OFF,建议OFF;

12. NO_ZERO_DATE

控制是否判别 ‘0000-01-01’(年份为0)为合法的日期,配合StrictMode作用。
当为OFF时, '0000-01-01’是合法日期;
当为ON时, '0000-01-01’不是合法日期;
默认为OFF,建议ON;

13. NO_ZERO_IN_DATE

和NO_ZERO_DATE相似,不同的是前者控制的是年份,后者控制的月份和天(如:2022-13-32)。

默认为OFF,建议ON;

建议设置为:set sql_mode=“STRICT_ALL_TABLES,STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE”

14. ONLY_FULL_GROUP_BY

控制mysql中 select … group by 语句的写法。

原因是这样的,在sql92标准的时候,规定如果使用了group by子句,那么select子句的列一定被包含在group by 子句中,或者使用sum等聚合函数包裹。
然而,到了sql99的时候,规定select 子句的列也可以不被包含在group by 子句中,如:select t_id,t_name,t_age from test group by t_id是可以的,因为 t_id 是主键。

15. PAD_CHAR_TO_FULL_LENGTH

控制读取char(M)类型的列值时,当实际值的长度不到M时,是否在默认添加空格以补齐M的长度。
例如,我们向char(10)中插入字符串’abc ‘(abc+3个空格),那么我们读取时:
当为OFF时,读取到的是’abc’,后面没有空格,因为mysql会自动去掉末尾的空格。
当为ON时,读取到的是’abc '(abc+7个空格),mysql会自动补齐到长度10;
默认OFF,建议OFF。另外,这是一个即将被弃用的模式。

16. PIPES_AS_CONCAT

控制是否将 ‘||’ 作为 string之间的链接符号,就像 concat(string1,string2) 函数一样。
当为OFF时,|| 是 or 的同义词,不过mysql建议使用 or 而不是 || ;
当为ON时,|| 和concat函数类似;
默认OFF,建议OFF;

17. REAL_AS_FLOAT

控制是否将 real 当做float的同义词,
当为OFF时,real是double的同义词;
当为ON时,real是float的同义词;
默认OFF,建议OFF;

18. TIME_TRUNCATE_FRACTIONAL

控制当时间的毫秒精度超出时,是进行四设五入,还是直接舍弃多余的位数。
举个例子,当将’14:52:12.15’插入到time(1)的时候,是插入’14:52:12.2’还是插入’14:52:12.1’
当为OFF时,进行四设五入,插入14:52:12.2;
当为ON时,舍弃多余的位数,插入14:52:12.1;
默认为OFF,建议OFF。

相关文章:

MySQL的sql_mode模式简介

前言 今天同事使用数据库时报错,排查问题时发现配置文件里的sql_mode配置被人注释了,所以通过查询资料对这个配置进行了下了解。 介绍 mysql为了支持在不同的环境下运行,允许我们给它设置不同的运行模式(sql_mode)。 不同的运行模式&#…...

性能优化-如何爽玩多线程来开发

前言 多线程大家肯定都不陌生,理论滚瓜烂熟,八股天花乱坠,但是大家有多少在代码中实践过呢?很多人在实际开发中可能就用用Async,new Thread()。线程池也很少有人会自己去建,默认的随便用用。在工作中大家对…...

非关系型数据库-----------Redis的主从复制、哨兵模式

目录 一、redis群集有三种模式 1.1主从复制、哨兵、集群的区别 1.1.1主从复制 1.1.2哨兵 1.1.3集群 二、主从复制 2.1主从复制概述 2.2主从复制的作用 ①数据冗余 ②故障恢复 ③负载均衡 ④高可用基石 2.3主从复制流程 2.4搭建redis主从复制 2.4.1环境准备 2.4…...

使用docx4j转换word为pdf处理中文乱码问题

word转pdf 实现方法 mavendocx4j版本自己酌情升级 实现方法 import org.docx4j.Docx4J; import org.docx4j.fonts.IdentityPlusMapper; import org.docx4j.fonts.Mapper; import org.docx4j.fonts.PhysicalFonts; import org.docx4j.openpackaging.packages.WordprocessingMLP…...

【引子】C++从介绍到HelloWorld

C从介绍到HelloWorld 一、C的介绍1. 简介2. 应用场景3. C的标准![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/e3efb0f207f647729b92c0b5bcd4b330.png)4. C的运行过程 二、Visual Studio的安装1. 什么是Visual Studio2. Visual Studio的安装 三、完成HelloWorld1.…...

Django检测到会话cookie中缺少HttpOnly属性手工复现

一、漏洞复现 会话cookie中缺少HttpOnly属性会导致攻击者可以通过程序(JS脚本等)获取到用户的cookie信息,造成用户cookie信息泄露,增加攻击者的跨站脚本攻击威胁。 第一步:复制URL:http://192.168.43.219在浏览器打开,…...

2024数字城市建设博览会:一站式平台,满足多元需求

2024数字城市建设博览会:引领未来城市发展的风向标 2024年,一场前所未有的盛会——数字城市建设博览会暨交流大会,将在雄安这座未来之城拉开帷幕。本次大会不仅是数字经济全产业链的精英集结,更是一场汇聚了众多优质项目和丰富客…...

iOS 17.5系统或可识别并禁用未知跟踪器,苹果Find My技术应用越来越合理

苹果公司去年与谷歌合作,宣布将制定新的行业标准来解决人们日益关注的跟踪器隐私问题。苹果计划在即将发布的 iOS 17.5 系统中加入这项提升用户隐私保护的新功能。 科技网站 9to5Mac 在苹果发布的 iOS 17.5 开发者测试版内部代码中发现了这项反跟踪功能的蛛丝马迹…...

关于搭建elk日志平台

我这边是使用docker compose进行的搭建 所以在使用的时候 需要自行提前安装docker以及dockercompose环境 或者从官网下载对应安装包也可以 具体文章看下一章节:【ELK】搭建elk日志平台(使用docker-compose),并接入springboot项目...

【全套源码教程】基于SpringBoot+MyBatis+Vue的流浪动物救助网站的设计与实现

目录 前言 需求分析 可行性分析 技术实现 后端框架:Spring Boot 持久层框架:MyBatis 前端框架:Vue.js 数据库:MySQL 功能介绍 前台界面功能介绍 动物领养及捐赠 宠物论坛 公告信息 商品页面 寻宠服务 个人中心 购…...

Word wrap在计算机代表的含义(自动换行)

“Word wrap”是一个计算机术语,用于描述文本处理器在内容超过容器边界时自动将超出部分转移到下一行的功能。在多种编程语言和文本编辑工具中,都有实现这一功能的函数或选项。 在编程中,例如某些编程语言中的wordwrap函数,能够按…...

室友打团太吵?一条命令让它卡死

「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:更多干货,请关注专栏《网络安全自学教程》 SYN Flood 1、hping3实现SYN Flood1.1、主机探测1.2、扫描端…...

RabbitMQ3.13.x之八_RabbitMQ中数据文件和目录位置

RabbitMQ3.13.x之_RabbitMQ中数据文件和目录位置 文章目录 RabbitMQ3.13.x之_RabbitMQ中数据文件和目录位置1. 概述2. 覆盖位置1. 路径和目录名称限制2.所需的文件和目录权限 3. 环境变量4. Linux、macOS、BSD上的默认位置5. Windows上的默认位置6. 通用二进制构建默认值 1. 概…...

仿抖音短视频直播带货刷一刷商城社交电商源码系统小程序APP开发

系统功能介绍 一、短视频与社交功能 短视频浏览与互动 用户可以浏览仿抖音风格的短视频,包括评论、点赞、进入视频发布者的主页,以及加关注等功能。系统会显示用户关注的好友列表,方便用户快速查看好友发布的视频。用户还可以浏览同城视频&…...

Vue - 你知道Vue组件中的data为什么是一个函数吗

难度级别:中高级及以上 提问概率:80% 在Vue项目中,App.vue下的每个子组件都会生成一个单独的Vue实例对象,但这些子对象都是通过通过vue.extend方法创建而来的,也就是说我们平时在项目中所定义的Vue组件,都有一个相同的父类对象。这样也就…...

MUX VLAN

目录 原理概述 实验目的 实验内容 实验拓扑 1.基本配置 2.使用Hybrid端口实现网络需求 3.使用Mux VLAN实现网络需求 原理概述 在实际的企业网络环境中,往往需要所有的终端用户都能够访问某些特定的服务器,而用户之间的访问控制规则则比较复杂。在…...

漫谈:“标准”是一种幻觉 C++语言标准的意义

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 “标准”这个词很迷惑&#xf…...

【Wbpack原理】基础流程解析,实现 mini-webpack

【Wbpack原理】基础流程解析,实现 mini-webpack ⛄:webpack 对前端同学来说并不陌生,它是我们学习前端工程化的第一站,在最开始的 vue-cli 中我们就可以发现它的身影。我们的 vue/react 项目是如何打包成 js 文件并在浏览器中运行…...

Debian 安装 python 3.9.6

安装相关依赖 sudo apt update sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libsqlite3-dev libreadline-dev libffi-dev curl libbz2-dev 下载Python 源码 wget https://mirrors.aliyun.com/python-release/source/Py…...

搜索二维矩阵2 合并两个有序链表

240. 搜索二维矩阵 II - 力扣&#xff08;LeetCode&#xff09; class Solution { public:bool searchMatrix(vector<vector<int>>& matrix, int target) {int i matrix.size() - 1, j 0;while(i > 0 && j < matrix[0].size()){if(matrix[i][j…...

深入Tauri开发——从环境搭建到项目构建

深入Tauri开发——从环境搭建到项目构建 开启你的Tauri桌面应用开发之旅&#xff08;续&#xff09; 经过上一篇文章的基础介绍&#xff0c;现在让我们更进一步&#xff0c;详细阐述如何在Windows和macOS平台上顺利搭建Tauri应用所需的开发环境&#xff0c;并指导您从创建项目…...

Redis 和 Mysql 数据库数据如何保持一致性

Redis 和 Mysql 数据库数据如何保持一致性 保持Redis和MySQL数据库数据一致性是一个常见且重要的问题&#xff0c;特别是在使用Redis作为MySQL数据库的缓存层时。以下是几种常用的保证二者数据一致性的策略和方法&#xff1a; 双写一致性&#xff08;同步更新&#xff09;&…...

探索7个MAMP本地开发环境的高效替代软件

什么是本地开发环境 本地开发环境是Web开发环境中的一种类型&#xff0c;它是指开发者自己的计算机上配置的一套用于开发和测试网站或应用程序的软件集合。这套环境使得开发者可以在本地计算机上构建和测试网站&#xff0c;而无需实时部署到服务器。 创建本地开发环境有两种方…...

靡语IT:Bootstrap 简介

1.1 Bootstrap 简介&#xff1a;什么是 Bootstrap? Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架。Bootstrap是前端开发中比较受欢迎的框架&#xff0c;简洁且灵活。它基于HTML、CSS和JavaScript&#xff0c;HTML定义页面元素&#xff0c;CSS定义页面布局&…...

亚马逊店铺引流:海外云手机的利用方法

在电商业务蓬勃发展的当下&#xff0c;亚马逊已经成为全球最大的电商平台之一&#xff0c;拥有庞大的用户群和交易量。在激烈的市场竞争中&#xff0c;如何有效地吸引流量成为亚马逊店铺经营者所关注的重点。海外云手机作为一项新兴技术工具&#xff0c;为亚马逊店铺的流量引导…...

10 Python进阶:MongoDB

MongoDb介绍 MongoDB是一个基于分布式架构的文档数据库&#xff0c;它使用JSON样式的数据存储&#xff0c;支持动态查询&#xff0c;完全索引。MongoDB是NoSQL数据库的一种&#xff0c;主要用于处理大型、半结构化或无结构化的数据。以下是MongoDB数据库的一些关键特点和优势&a…...

Leetcode 142. 环形链表 II和Leetcode 242. 有效的字母异位词

文章目录 Leetcode 142. 环形链表 II题目描述C语言题解解题思路 Leetcode 242. 有效的字母异位词题目描述C语言题解和思路解题思路 Leetcode 142. 环形链表 II 题目描述 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返…...

【嵌入式DIY实例】-MODBUS串行通信

MODBUS串行通信 文章目录 MODBUS串行通信1、什么是RS-4852、MAX485 TTL转RS485转换器3、硬件准备4、代码实现4.1 主机和从机之间简单通信4.2 主/从机之间LED控制在本文中,我们将介绍如何使用 MAX485 MODBUS 在Arduino之间进行串行通信。 我们将使用 Arduino nano 板和 MODBUS …...

入门用Hive构建数据仓库

在当今数据爆炸的时代&#xff0c;构建高效的数据仓库是企业实现数据驱动决策的关键。Apache Hive 是一个基于 Hadoop 的数据仓库工具&#xff0c;可以轻松地进行数据存储、查询和分析。本文将介绍什么是 Hive、为什么选择 Hive 构建数据仓库、如何搭建 Hive 环境以及如何在 Hi…...

【计算机网络】会话层

负责维护两个会话主机之间链接的建立、管理和终止&#xff0c;以及数据的交换。 会话控制&#xff1a;决策该由谁来传递数据 令牌管理&#xff1a;禁止双方同时执行一个关键动作 同步功能&#xff1a;在一个长的传输过程中设置一些断点&#xff0c;以便系统崩溃后能恢复至崩…...

腾讯云网站建设/电子商务网站建设案例

【java数据结构】--数组模拟队列 入队 1. if (rear1)%MaxSize front 队列满 2. arr[rear] data 3. 尾指针后移 rear(rear1)%MaxSize 出队 1. if (front1)%MaxSize rear 队列空 2. 头指针后移 valuearr[front] 3.front (front1)%MaxSize 4.返回value 有效数据个数 rear …...

佛山网站建设小程序/住房和城乡建设部官网

写在开篇 我大学是计算机专业的&#xff0c;但是我对于代码方面不太感冒&#xff0c;实习的时候接触到UI设计还挺感兴趣&#xff0c;也会有一些培训机构来学校做一些宣讲&#xff0c;但是家里面不太支持&#xff0c;他们就会觉得大学四年也差不多是花这些你都没有学到什么&…...

给做网站建设的一些建议/唐山seo排名外包

Swing中提供了JOptionPane类来实现类似Windows平台下的MessageBox的功能&#xff0c;同样在Java中也有&#xff0c;利用JOptionPane类中的各个static方法来生成各种标准的对话框&#xff0c;实现显示出信息、提出问题、警告、用户输入参数等功能。这些对话框都是模式对话框。Co…...

济宁网站建设 智雅/找百度

希腊神话记载&#xff0c;普罗米修斯偷来了火&#xff0c;被宙斯囚禁在高加索山上&#xff0c;每天会有一只鹰来啄他的肝脏 普罗米修斯&#xff0c;意思是“先见之明”(forethought)。他帮人类从奥林匹斯偷取了火&#xff0c;因此触怒宙斯&#xff0c;将他锁在高加索山的悬崖上…...

js插件打开wordpress/网络推广工作室

从概念上说&#xff0c; I P路由选择是简单的&#xff0c;特别对于主机来说。如果目的主机与源主机直接相连&#xff08;如点对点链路&#xff09;或都在一个共享网络上&#xff08;以太网或令牌环网&#xff09;&#xff0c;那么I P数据报就直接送到目的主机上。否则&#xff…...

罗湖网站建设报价/把百度网址大全设为首页

#金山快盘#窗前明月光&#xff0c; [快盘] 签到忙。点击得10M&#xff0c;微博还有奖。文件 [快盘] 放&#xff0c;不畏丢失殇&#xff1b;作息分两地&#xff0c;同步最擅长&#xff1b;在线想协作&#xff1f; [快盘] 有共享&#xff1b;平台终端广&#xff0c;陪我走四方&am…...