MySQL(四)--SQL_MODE
来源:互联网 发布:用友软件下载 编辑:程序博客网 时间:2024/06/16 04:27
一.SQL_MODE简介
顾名思义,SQL_MODE为SQL模式,是一个重要但又比较容易让开发人员和DBA忽略的一个变量。
通过对其正确的设置可以完成一些约束检查的工作,设置时,可在配置文件my.cnf或my.ini中进行,也可在客户端中进行,并可分别进行全局的设置或当前会话的设置。
5.6以后默认的my.cnf文件里模式配置是sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES。
二.为什么需要SQL_MODE?
MySQL服务器能够工作在不同的SQL模式下,并能针对不同的客户端以不同的方式应用这些模式。这样,应用程序就能对服务器操作进行量身定制以满足自己的需求。这类模式定义了MySQL应支持的SQL语法,以及应该在数据上执行何种确认检查。这样,就能在众多不同的环境下,与其他数据库服务器一起更容易地使用MySQL。
三.警告
SQL_MODE的设置其实是比较冒险的一种设置,因为在这种设置下可以允许一些非法操作,比如可以将NULL插入NOT NULL的字段中,也可以插入一些非法日期,如“2012-12-32”。因此在生产环境中强烈建议开发人员将这个值设为严格模式,这样有些问题可以在数据库的设计和开发阶段就能发现,而如果在生产环境下运行数据库后发现这类问题,那么修改的代价将变得十分巨大。
四.查看SQL_MODE设置情况
五.设置SQL_MODE
5.1 会话级别,只对当前会话有效,退出终端后既失效
5.2 全局级别,适用于所有会话,但仅限于本次mysql进程,下次重启还要重新设置
重新启动已经改变
六.MySQL的SQL_MODE选项
STRICT_TRANS_TALES(严格模式):
只对支持事务的表启用严格模式。
STRICT_ALL_TABLES(严格模式):
对所有引擎的表都启用严格模式。
严格模式:
在此模式下,一旦任何操作的数据产生问题,都将终止当前的操作,对于启用STRICT_ALL_TABLES的非事务引擎而言,这时数据可能停留在一个未知的状态,因此需非常小心这个选项可能带来的潜在影响。
ALLOW_INVALID_DATES:
不完全对日期合法性作检查,只检查月份是否在1~12,日期是否在1~31之间;仅对DATE和DATETIME有效,而对TIMESTAMP无效,因为TIMESTAMP总要求一个合法的输入。
ANSI_QUOTES:
启用后,不能用双引号来引用字符串,因为"(双引号)将被解释为标识符。
ERROR_FOR_DIVISION_BY_ZERO:
启用后,在insert或update过程中,若数据被零除(或MOD(x,0),则产生错误,若未启用,则产生警告,数据被零除时系统返回NULL。
HIGH_NOT_PRECEDENCE NOT:
操作符的优先顺序是表达式。例如,NOT a BETWEEN b AND c被解释为NOT(a BETWEEN b AND c),在一些旧版本MySQL中, 前面的表达式被解释为(NOT a)BETWEEN b AND c。启用HIGH_NOT_PRECEDENCESQL模式,可以获得以前旧版本的更高优先级的结果。
IGNORE_SPACE:
启用后,忽略函数名和括号"("之间空格,要访问保存为关键字的数据库名,表名,列名时,需启用。
NO_AUTO_VALUE_ON_ZERO:
该选项影响列为自增长的插入。在默认设置下,插入0或NULL代表生成下一个自增长值。如果用户希望插入的值为0,而该列又是自增长的,那么这个选项就有用了。
NO_BACKSLASH_ESCAPES:
反斜杠"\"作为普通字符而非转义字符。
NO_DIR_IN_CREATE:
在创建表时忽略所有index directory和datadirectory的选项。
NO_ENGINE_SUBSTITUTION:
启用后,若需要的存储引擎被禁用或未编译,则抛出错误;未启用时将用默认的存储引擎代替,并抛出一个异常。
NO_UNSIGNED_SUBSTRACTION:
启用后,两个UNSIGNED类型相减返回SIGNED类型。
NO_ZERO_DATE:
启用后,不允许插入“0000-00-00 00:00:00”形如此类的零日期,这将抛出一个错误,若未启用,则可插入但仅会抛出一个警告。
NO_ZERO_IN_DATE:
启用后,不允许月份和日期为零,和NO_ZERO_DATE一起启用,如“1999-01-00”将抛出错误而非警告。
若单独启用本项,则会抛出warning,然后插入如“0000-00-0000:00:00”。
ONLY_FULL_GROUP_BY:
对于GROUP BY聚合操作,若select中的列没有在group by中出现,那么这句SQL是不合法的。
PIPES_AS_CONCAT:
将"||"视为连接操作符而非“或运算符”。
REAL_AS_FLOAT:
将REAL视为FLOAT的同义词而非DOUBLE的同义词。
组合选项:
·ANSI:
REAL_AS_FLOAT、PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、ANSI
·ORACLE:
PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、NO_FIELD_OPTIONS、NO_AUTO_CREATE_USER、ORACLE
·TRADITIONAL:
STRICT_TRANS_TABLES、STRICT_ALL_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION、TRADITIONAL
·MSSQL:
PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、MSSQL、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、NO_FIELD_OPTIONS、MSSQL
·DB2:
PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、NO_FIELD_OPTIONS、DB2
·MYSQL323:
HIGH_NOT_PRECEDENCE、MYSQL323
·MYSQL40:
HIGH_NOT_PRECEDENCE、MYSQL40
·MAXDB:
PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、NO_FIELD_OPTIONS、NO_AUTO_CREATE_USER、MAXDB
- MySQL(四)--SQL_MODE
- MYSQL - SQL_MODE
- mysql sql_mode
- MySQL-----sql_mode
- mysql sql_mode
- MySQL 严格模式 sql_mode
- mysql的sql_mode介绍
- mysql的sql_mode
- mysql的sql_mode
- mysql sql_mode 的学习
- Mysql的SQL_MODE
- Mysql的sql_mode设置
- [Mysql variables] 解析sql_mode
- mysql sql_mode 使用
- mysql sql_mode 汇总整理
- MySQL sql_mode解读
- MySQL SQL_MODE详解
- mysql sql_mode小分享
- Pycharm or Intellij IDEA Cannot load settings from file workspace.xml
- Android 中3d旋转动画Rotate3dAnimation大图旋转失真的问题
- DIV+CSS首页布局练习
- 决策树-剪枝算法(二)
- VBS脚本获取安全标识符SID(Security Identifiers)的方法
- MySQL(四)--SQL_MODE
- 可心耳语-属于网络工程师的人声电台(第一期)
- Java IO最详解
- 面向对象编程与面向过程编程的区别
- AfxGetApp
- APK免安装启动
- 二分查找算法java版实现(递归实现与非递归实现)
- eclipse导入SVN上的Maven多模块项目
- ASP.NET Web Application中使用链接文件