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 | 设置该值,mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告 |
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后,不能用双引号来引用字符串,因为它被解释为识别符 |
Oracle数据库的sql_mode设置等同:PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS, NO_AUTO_CREATE_USER。
生产环境sql_mode推荐设置
# 查询当前sql_mode
select @@GLOBAL.sql_mode;
在my.cnf添加如下配置
- # win [mysqld] ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
- linux 严格模式 sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION linux 宽松模式 sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
注意:
NO_AUTO_CREATE_USER再MYSQL8.0中已经被移除,不能再8.0以上版本配置
相关文章
- mysql executereader_C# 操作MySQL数据库, ExecuteReader()方法参数化执行T-SQL语句, 游标读取数据…
- MySQL:设置活动会话过期时间(mysql过期时间)
- 简单 SQL 语句MySQL数据库:编写简单的SQL查询语句(mysql数据库编写)
- MySQL操作:执行SQL语句(mysql执行sql语句)
- 如何使用PL/SQL连接MySQL数据库(plsql连接mysql数据库)
- MySQL中将数据转为字符串的方法(mysql转为字符串)
- MySQL数据库应用程序开发:挑战与机遇(mysql数据库应用开发)
- MySQL备份程序:安全存储你的数据(mysql备份存储过程)
- 技巧SQL优化:挖掘MySQL的潜在技巧(sql优化mysql)
- MySQL如何将日期转换为秒(mysql日期转秒)
- MySQL数据库:实现分页函数的简单方法(mysql数据库分页函数)
- MySQL字段类型: 深入理解每种数据类型(mysql字段类型)
- Exploring the Power of MySQL Stored Procedures with SQL(mysql存储过程sql)
- 比较与选择:MS SQL和MySQL的优势对比(mssql和mysql)
- MySQL命令详解:学习SQL语言不可或缺的基本功。(mysql命令)
- 深入探讨:MySQL数据库的优劣分析(mysql数据库怎么样)
- 如何更有效地清理MySQL数据库(mysql 清理数据库)
- 在Linux系统下安装MySQL数据库(linux下安装mysql)
- MySQL中方便的SQL编辑器,提高开发效率(mysql中sql编辑器)
- MySQL SQL优化25字,只是简明扼要地表达了文章的主题(mysql中sql优化)
- csv文件快速倒入MySQL实现数据管理(csv文件倒入mysql)
- 利用C语言操作SQL和MySQL(c sql和mysql)
- 学习MySQL两表查询,掌握SQL连接操作(mysql两表查询的方法)
- 如何快速安装MySQL数据库到ARM架构系统上(arm 安装mysql)
- 如何在 MySQL 中去掉双引号(mysql 中去掉双引号)
- MySQL创建表示例快速掌握MYSQL基础操作(mysql中创建表的例子)