sql_mode

Mysql SQL MODE 通常在Linux下安装完mysql后,默认的sql_mode值是空,在这种情形下mysql执行的是一种不严格的检查,如果要插入的字段长度超过列定义的长度,那么mysql不会终止操作,而是会自动截断后面的字符继续插入操作,如: mysql> insert into t values(8,'abcdefghijklmnopqrst'); Query OK, 1 row affected, 1 wa 阅读详情

昨晚在往MySQL数据库中插入一组数据时,出错了!数据库无情了给我报了个错误:ERROR 1365(22012):Division by 0;意思是说:你不可以往数据库中插入一个 除数为0的运算的结果。于是乎去谷歌了一番,总算是明白了其中的原因:是因为MySQL的sql_mode 模式限制着一些所谓的‘不合法’的操作。


解析

这个sql_mode,简而言之就是:它定义了你MySQL应该支持的sql语法,对数据的校验等等。。

一、如何查看当前数据库使用的sql_mode:

  1. mysql> select @@sql_mode;  
mysql> select @@sql_mode;

如下是我的数据库当前的模式:



二、sql_mode值的含义:

ONLY_FULL_GROUP_BY:

对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么将认为这个SQL是不合法的,因为列不在GROUP BY从句中


STRICT_TRANS_TABLES:

在该模式下,如果一个值不能插入到一个事务表中,则中断当前的操作,对非事务表不做任何限制


NO_ZERO_IN_DATE:

在严格模式,不接受月或日部分为0的日期。如果使用IGNORE选项,我们为类似的日期插入’0000-00-00’。在非严格模式,可以接受该日期,但会生成警告。


NO_ZERO_DATE:

在严格模式,不要将 ‘0000-00-00’做为合法日期。你仍然可以用IGNORE选项插入零日期。在非严格模式,可以接受该日期,但会生成警告


ERROR_FOR_DIVISION_BY_ZERO:

在严格模式,在INSERT或UPDATE过程中,如果被零除(或MOD(X,0)),则产生错误(否则为警告)。如果未给出该模式,被零除时MySQL返回NULL。如果用到INSERT IGNORE或UPDATE IGNORE中,MySQL生成被零除警告,但操作结果为NULL。


NO_AUTO_CREATE_USER

防止GRANT自动创建新用户,除非还指定了密码。


NO_ENGINE_SUBSTITUTION:

如果需要的存储引擎被禁用或未编译,那么抛出错误。不设置此值时,用默认的存储引擎替代,并抛出一个异常


另外还有一些,这里仅对我本地当前值做解释分析。。。。。


三、据说是MySQL5.0以上版本支持三种sql_mode模式:ANSI、TRADITIONAL和STRICT_TRANS_TABLES。 

1、ANSI模式:宽松模式,更改语法和行为,使其更符合标准SQL。对插入数据进行校验,如果不符合定义类型或长度,对数据类型调整或截断保存,报warning警告。对于本文开头中提到的错误,可以先把sql_mode设置为ANSI模式,这样便可以插入数据,而对于除数为0的结果的字段值,数据库将会用NULL值代替。

将当前数据库模式设置为ANSI模式:

  1. mysql> set @@sql_mode=ANSI;  
mysql> set @@sql_mode=ANSI;


2、TRADITIONAL模式:严格模式,当向mysql数据库插入数据时,进行数据的严格校验,保证错误数据不能插入,报error错误,而不仅仅是警告。用于事物时,会进行事物的回滚。 注释:一旦发现错误立即放弃INSERT/UPDATE。如果你使用非事务存储引擎,这种方式不是你想要的,因为出现错误前进行的数据更改不会“滚动”,结果是更新“只进行了一部分”。

将当前数据库模式设置为TRADITIONAL模式:

  1. mysql> set @@sql_mode=TRADITIONAL;   
mysql> set @@sql_mode=TRADITIONAL; 


3、STRICT_TRANS_TABLES模式:严格模式,进行数据的严格校验,错误数据不能插入,报error错误。如果不能将给定的值插入到事务表中,则放弃该语句。对于非事务表,如果值出现在单行语句或多行语句的第1行,则放弃该语句。

将当前数据库模式设置为STRICT_TRANS_TABLES模式:

  1. mysql> set @@sql_mode=STRICT_TRANS_TABLES;  
mysql> set @@sql_mode=STRICT_TRANS_TABLES;


没有最好与最坏的模式,只有最合适的模式。需要根据自己的实际情况去选择那个最适合的模式!!!


另外说一点,这里的更改数据库模式都是session级别的,一次性,关了再开就不算数了!!!

也可以通过配置文件设置:vim /etc/my.cnf
在my.cnf(my.ini)添加如下配置:
[mysqld]
sql_mode=’你想要的模式’

MySQL关于sql_mode解析与设置讲解 昨晚在往MySQL数据库中插入一组数据时,出错了!数据库无情了给我报了个错误:ERROR 1365(22012):Division by 0;意思是说:你不可以往数据库中插入一个 除数为0的运算的结果。于是乎去谷歌了一番,总算是明白了其中的原因:是因为MySQL的sql_mode 模式限制着一些所谓的‘不合法’的操作。 解析 这个sql_mode,简而言之就是:它定义了你MySQL应该支持的sql语法,对数据的校验等等。。 如何查看当前数据库使用的sql_mode: mysql> select @@sql_mode; 如下是我的数据库当前的模式: MySQL服务器能够工作在不同的SQL模式 立即下载

相关推荐

低速信号设计之 LPC 篇

摘要:LPC总线作为服务器低速信号设计的关键技术,在BIOS芯片连接、Super I/O芯片控制和嵌入式管理等方面发挥着重要作用。其采用33MHz时钟频率和4位并行传输机制,理论速率达16.5MB/s。设计时需重点关注布线长度(建议<10cm)、信号完整性(45°走线、合理层间隔离)和过孔优化等要点。典型应用案例表明,通过规范设计可确保在工业控制等复杂环境中稳定工作。LPC总线凭借低成本、低引脚数和良好兼容性,仍是服务器低速外设连接的重要解决方案。

qq_16237389的博客 1164

mysql存储过程报错[1365] Data truncation: Division by 0

[1365] Data truncation: Division by 0

weixin_42188813的博客 7474

Second-Order Cone Programming(SOCP) 二阶锥规划

个人博客Glooow,欢迎各位老师来踩踩 文章目录1. 二阶锥1.1 二阶锥定义1.2 二阶锥约束2. 优化问题建模3. 类似问题转化3.1 二次规划3.2 随机线性规划4. 问题求解 1. 二阶锥 1.1 二阶锥定义 在此之前,先给出二阶锥的定义。 在 kkk 维空间中二阶锥 (Second-order cone) 的定义为 Ck={[ut]∣u∈Rk−1,t∈R,∥u∥≤t} \mathc...

Glooow的博客 3万+

mysql除法报错1365 - Division by 0 可以使用一下方法

除0时,如果报下面这个错误时;可用下面这个函数 nullif函数 nullif函数有两个参数,定义如下: NULLIF( expression , expression ) 其作用就是:如果两个指定的表达式相等,就返回null值。 例如 select NULLIF(2,3) 返回2 select NULLIF(2,0) 返回0 除数为null结果为null且不会报错 所以可以用 分子/NULLIF(表达式,0) 来保证不报错 ...

weixin_45627271的博客 1万+

《QMT量化实战系列》支持自定义筛选与排序的多因子策略,实测年化收益超100%

【QMT量化实战系列】推出《支持自定义筛选与排序的多因子策略》,通过Tushare获取38个核心因子数据,实现股票多维筛选(剔除ST股、次新股及特定板块)。策略创新性地采用多因子加权排名机制,通过(股票数-排名+1)/股票数*100的算法计算各因子得分,支持自定义权重组合。该策略提供完整代码及详细注释,涵盖数据获取、因子筛选、权重排序等核心环节,帮助用户构建个性化量化模型。系列内容每月更新1-2期,由浅入深讲解QMT平台实战应用。

qq_46262068的博客 1255

三种1:4传输线变压器巴伦的分析

满足多模多馈天线系统匹配要求的传输线变压器巴仑有:双线传输线变压器( 见图1) 、三线传输线变压器( 见图4) 和四线传输线变压器( 见图5) 。尽管3 者的结构不同, 但都可实现1∶4 阻抗变换和不平衡-平衡转换。下面就应用电报方程对它们的阻抗变换特性和输出平衡特性进行分析。

weixin_42407808的博客 8042

mysql 报错 division by 0

mysql 5.5升级到5.7的坑 mysql 5.5升级到5.7后对数据库的要求更加严格了,所以我们在升级之后的一系列的操作都会失败。 具体有哪些sql_mode发生变化,我们可以查询 select @@global.sql_mode;//查询全局的sql_mode, select @@sql_mode;//查询补充系统变量sql_mode; 常见的sql_mode模式 ONLY_FULL_GROUP_BY 对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那

迪迦奥特曼的博客 1万+

LeGo-LOAM源码篇:源码分析(3)

mapOptmization.cpp,主要内容包括回环检测、scan-to-map位姿优化、因子图。

slamml 1382

Mysql 报错 1365 - Division by 0

【代码】Mysql 报错 1365 - Division by 0。

1853 1490

Windows2008使用-解决漏洞-CVE-2010-2730

随着硬件的升级,操作系统也逐渐进行了版本更新。目前阶段,Windows2016Server、Windows2022Server逐渐成为了以Windows系列的服务器平台系统。对于有些应用而言,由于其业务的固定,可能仍只能运行在Windows2008Server或者Windows2012Server上。有时候我们为安全需要,需要将相关的操作系统涉及的漏洞做修复。最近碰到在一个Windows2008R2 的操作系统漏洞CVE-2010-2730,一顿操作,终于找到了合适的方案,这里分享给大家。

mystonelxj的博客 2314

ARM交叉编译gdbserver并远程在线调试

arm-linux平台。5、生成完整的makefile,新建full_install,执行 ./configure --target=arm-linux-gnueabihf --host=arm-linux-gnueabihf --program-prefix=arm-linux-gnueabihf- CC=arm-linux-gnueabihf-gcc --prefix=/home/geyuxi/Documents/full_install。如果--host和--build不同,是交叉编译;

wangjie36的博客 3168

MySQL中@@GLOBAL.SQL_MODE和@@SESSION.SQL_MODE

用于控制 SQL 语法和数据处理方式,影响 MySQL 服务器的行为。控制 MySQL 的 SQL 语法规则,避免数据错误,提高兼容性。这样可以确保数据的一致性,并减少潜在的数据错误!修改后影响新的连接,但不会影响已经存在的连接。影响所有新会话,需修改配置文件才会持久生效。:如果你的应用需要严格的数据完整性,建议在。仅影响当前会话,断开连接后恢复默认。只影响当前连接,断开后恢复默认。修改 MySQL 配置文件。,避免不符合规范的数据插入。,保证 SQL 逻辑一致。在 MySQL 中,

鸟人的博客 944

传统(经典)粒子群算法(PSO)解决单目标优化问题

智能算法:粒子群算法(particle swarm optimizer)—PSO %原理:(1)种群初始化–N(种群数)–D(个体数)–x(i)(粒子位置)–v(i)(粒子速度) % (2)计算每个粒子的适应度值–而适应度值需要选择适应度函数 % (3)对于每个粒子,使用它的适应度值fit[i]和个体的极值pbest(i)进行比较,如果fit[i]>pbest(i),则pbest(i)=fit[i] % (4)同理,对每个粒子用它的适应值与全局极值进行比较,如果比它大,则

weixin_51631044的博客 1295

MySQL sql_mode 说明(及处理一起 sql_mode 引发的问题)

MySQL sql_mode 说明(及处理一起 sql_mode 引发的问题) 1. MySQL莫名变成了 Strict SQL Mode 最近测试组那边反应数据库部分写入失败,app层提示是插入成功,但表里面里面没有产生数据,而两个写入操作的另外一个表有数据。因为 insert 失败在数据库层面是看不出来的,于是找php的同事看下错误信息: [Err] 1364 - Field ...

KevinHades的博客 1214

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Mysql中sql_mode使用详解

一、Sql_mode是什么? Sql_mode是一组mysql的语法校验规则,定义了mysql应该支持的sql语法、数据校验等。 二、如何查看当前sql_mode配置? 方法一:select @@sql_mode; 方法二:select @@SESSION.sql_mode; 方法三:select @@GLOBAL.sql_mode; 三、如何设置sql_mode? 1、通过命令设置 SET sql_mode = ''; SET SESSION sql_mode = ''; SE

firesea的专栏 2万+

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

MySQL sql_mode 说明(及处理一起sql_mode引发的问题)

转自:https://segmentfault.com/a/1190000005936172 1. MySQL 莫名变成了 Strict SQL Mode 最近测试组那边反应数据库部分写入失败,app层提示是插入成功,但表里面里面没有产生数据,而两个写入操作的另外一个表有数据。因为 insert 失败在数据库层面是看不出来的,于是找php的同事看下错误信息: [Err]1364- Fie...

weixin_30596735的博客 718

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

sql_mode详解

sql_mode详解

质量不太好的博客 7474

php mysql sql mode_Mysql之SQL Mode用法详解_MySQL

一、Mysql SQL Mode简介通常来说MySQL服务器能够工作在不同的SQL模式下,并能针对不同的客户端以不同的方式应用这些模式。这样,应用程序就能对服务器操作进行量身定制以满足自己的需求。这类模式定义了MySQL应支持的SQL语法,以及应该在数据上执行何种确认检查。这样,就能在众多不同的环境下、与其他数据库服务器一起更容易地使用MySQL。可以使用“--sql-mode="modes"”选...

weixin_28996657的博客 215

mysql SQL_mode参数_MySQL中sql_mode参数

1.sql_mode是一组mysql支持的基本语法及校验规则查询当前系统sql_mode的设置:mysql> select @@sql_mode;±--------------------------------------------------------------------------------------------+| @@sql_mode |±---------------...

weixin_26858217的博客 394

MySQL中sql_mode参数

1.sql_mode 是一组mysql支持的基本语法及校验规则 查询当前系统sql_mode的设置: mysql> select @@sql_mode; ±--------------------------------------------------------------------------------------------+ | @@sql_mode ...

weixin_42373127的博客 1万+

-SQL Mode对程序有怎样的影响?

设置SQL_MODE可能会使原先能执行的SQL无法执行,也可能影响数据写入操作,因此在生产环境修改这个参数前,需要对应用进行完整的测试验证。如果你进行了数据库迁移或升级,新环境数据库sql_mode和原先的设置不一样,也可能引起应用程序出错。因此需要注意迁移或升级前后sql_mode的设置。MySQL 5.7开始,sql_mode的默认设置跟之前的版本相比,有很大的改动,如果你是从更早的版本升级过来,需要特别注意。

qq_33240556的博客 1184

深入理解 MySQL 中的 SQL_MODE

SQL_MODE 是 MySQL 数据库中的一个系统变量,用于控制 MySQL 如何处理 SQL 语句和数据校验。它可以看作是一组约束和规范,确保数据的准确性、完整性和一致性。例如,可以控制如何处理无效日期、是否允许插入不完整的记录、是否区分大小写等。完成不同严格程度的数据校验,有效地保障数据准确性。保证大多数 SQL 符合标准的 SQL 语法,这样应用在不同数据库之间进行迁移时,则不需要对业务 SQL 进行较大的修改。在不同数据库之间进行数据迁移之前,通过设置 SQL_MODE。

ActionTech的博客 3049

sql-mode 说明

MySQL的sql_mode参数是控制SQL语法校验和数据写入行为的关键系统变量。它包含多种模式组合,影响非法数据处理、GROUP BY检查、日期时间处理等核心功能。常见模式包括:STRICT_TRANS_TABLES(严格校验)、ONLY_FULL_GROUP_BY(分组检查)、NO_ZERO_DATE(禁用零日期)等。可以通过全局或会话级别设置,推荐生产环境使用包含严格模式的配置(如TRADITIONAL组合),而老系统迁移时可临时采用宽松模式。不同MySQL版本默认配置不同,8.0比5.7更严格。

jugt的博客 377
上一篇: C/C++ 指向指针的指针
下一篇: C++ 中queue(队列)的用法
l_mofi
博客等级 码龄9年 7粉丝 78原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值