教你一招搞定mysql中的sql_mode设置
教你一招搞定MySQL中的sql_mode设置
MySQL是目前应用最广泛的关系型数据库管理系统之一,它的强大和灵活性被广泛认可和使用。在使用MySQL时,开发者通常需要对其进行一些配置和调整以符合自己的需求和实际情况,其中之一便是对sql_mode的设置。sql_mode是MySQL中一个重要的参数,它可以用来控制MySQL对SQL语句的解析和执行过程中的一些特性和行为。本文将教你一招搞定MySQL中的sql_mode设置,包括如何查看当前的sql_mode设置,以及如何修改sql_mode设置。
一、查看当前的sql_mode设置
在MySQL中,可以通过执行以下SQL语句来查看当前会话或全局的sql_mode设置:
1.查看当前会话的sql_mode设置,执行以下SQL语句:
```
select @@session.sql_mode;
```
2.查看全局的sql_mode设置,执行以下SQL语句:
```
select @@global.sql_mode;
```
执行以上语句后,MySQL将返回当前的sql_mode设置。
二、修改sql_mode设置
MySQL中的sql_mode可以在会话级别和全局级别进行设置,分别对当前会话和所有会话生效。开发者可以根据需要选择相应的设置级别和设置值来调整MySQL的行为和特性。下面分别介绍如何修改会话级别和全局级别的sql_mode设置。
1.修改会话级别的sql_mode设置
开发者可以通过以下SQL语句来修改当前会话的sql_mode设置:
```
set @@session.sql_mode='xx_mode';
```
其中,'xx_mode'代表具体的sql_mode设置值,可以根据需要进行调整。执行以上语句后,MySQL将在当前会话中生效新的sql_mode设置。需要注意的是,该操作仅对当前会话有效,对其他会话不产生影响。
2.修改全局级别的sql_mode设置
开发者可以通过以下SQL语句来修改全局的sql_mode设置:
```
set @@global.sql_mode='xx_mode';
```
同样,'xx_mode'代表具体的sql_mode设置值,可以根据需要进行调整。需要注意的是,该操作需要高级权限,仅对下次连接生效,不影响当前会话,且MySQL重启后失效,因为MySQL重启时会重新读取配置文件里对应值。如果需永久生效需要修改配置文件里的值。开发者可以通过以下步骤来实现:
1) 编辑MySQL配置文件/etc/my.cnf,添加如下内容:
```
[mysqld]
sql-mode="xx_mode"
```
其中,'xx_mode'是具体的sql_mode设置值。
2) 保存并退出配置文件,重启MySQL服务器,即可使新的sql_mode设置值永久生效。
注:sql_mode常用的设置值有以下几种:
ONLY_FULL_GROUP_BY:对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中。
NO_AUTO_VALUE_ON_ZERO:该值影响自增长列的插入。默认设置下,插入0或NULL代表生成下一个自增长值。如果用户希望插入的值为0,而该列又是自增长的,那么这个选项就有用了。
STRICT_TRANS_TABLES:在该模式下,如果一个值不能插入到一个事务表中,则中断当前的操作,对非事务表不做限制。
NO_ZERO_IN_DATE:在严格模式下,不允许日期或月份为零,只要日期的月或日中含有0值都报错,但是‘0000-00-00’除外。
NO_ZERO_DATE:设置该值,mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告。年月日中任何一个不为0都符合要求,只有‘0000-00-00’会报错。
ERROR_FOR_DIVISION_BY_ZERO:在INSERT或UPDATE过程中,如果数据被零除,则产生错误而非警告。如果未给出该模式,那么数据被零除时MySQL返回NULL。
NO_AUTO_CREATE_USER:禁止GRANT创建密码为空的用户。
NO_ENGINE_SUBSTITUTION:如果需要的存储引擎被禁用或未编译,那么抛出错误。不设置此值时,用默认的存储引擎替代,并抛出一个异常。
PIPES_AS_CONCAT:将"||"视为字符串的连接操作符而非或运算符,这和Oracle数据库是一样的,也和字符串的拼接函数Concat相类似。
ANSI_QUOTES:启用ANSI_QUOTES后,不能用双引号来引用字符串,因为它被解释为识别符。
本文介绍了如何查看和修改MySQL中的sql_mode设置,对开发者对于优化SQL语句和调整MySQL行为非常有用。希望本文对您有所帮助,更多精彩内容请关注UTHEME官网和技术博客。

-
MySQL Workbench怎么建立数据库(附:sql语句创建数据库方法) 2023-07-20 12:22:29
-
MySQL Workbench是什么?(附:如何设置中文教程) 2023-07-20 11:42:31
-
一起聊聊MySQL主从延时的处理方案 2023-05-14 07:00:03
-
mysql怎么将查询结果赋给变量 2023-05-14 07:00:03
-
mysql驱动是什么 2023-05-14 07:00:03
-
qt5.8如何连接mysql 2023-05-14 07:00:03
-
MySQL 语法整理介绍 2023-05-14 07:00:03
-
mysql修改表结构的语句是什么 2023-05-14 07:00:03
-
mysql乐观锁和悲观锁的区别是什么 2023-05-14 07:00:03
-
mysql查询怎么区分大小写 2023-05-14 07:00:02