1

数据库在默认情况下是不开启 sql_mode

服务器可以运行不同的sql mode ,设置sql_mode 的系统变量, 根据不同客户设置不同的sql mode

dba可以设置全局的sql mode 应用于整个数据库。 每个应用程序可以设置其会话的sql mode 满足自身的需求。

sql mode 影响mysqlsql语句的支持和验证检验sql执行的数据。

查看sql_mode的设置

全局 SELECT @@GLOBAL.sql_mode;

当前会话 SELECT @@SESSION.sql_mode;

设置sql_mode 全局设置还可以在mysql的配置文件my.cnf中设置。

全局 SET GLOBAL sql_mode = 'modes';

当前会话 SET SESSION sql_mode = 'modes';

/*************重要的sql 模式

最重要的sql_mode

ANSI

这种模式改变语法和行为使sql更贴近标准的sql语法。**************/

2

支持的sql_mode 模式

ALLOW_INVALID_DATES

该选项并不完全对日期的合法性进行检查,只检查月份是否在1-12 之间和日期是否在1-31之间,该模式仅对datedatetime 模式有效,而对timestamp 无效,因为timestamp总是要求一个合法的输入。

服务器要求月和天值是合法的,而不只是在1 - 121 - 31日。不启动严格,无效的日期等 '2004-04-31'被转换成 '0000-00-00'并生成一个警告。启用了严格模式、无效的日期生成一个错误。

ANSI_QUOTES

启用 ANSI_QUOTES 后,不能使用双引号来引用字符,双引号将被识别为字符。可以使用单引号

814B17299F314CFEA486772775BEC00F

ERROR_FOR_DIVISION_BY_ZERO

insert 或者update过程中,如果数据被灵除(或modx0)),则产生错误(否则为警告),如果未使用该模式,那么数据被零除时mysql返回null,如果用到insert ignore或者 update ignore 中,mysql生成被零除警告,但操作结果返回null

对数据库的操作效果也取决于严格模式的启用

如果没有启用这个模式,除零插入 NULL并产生没有警告。

如果启用了此模式,除零插入 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模式,可以获得以前的更高优先级的结果。

98B513DC7CB14D4E9ABA8F8147D8543A

NO_AUTO_CREATE_USER

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

 NO_AUTO_VALUE_ON_ZERO   禁用

NO_AUTO_VALUE_ON_ZERO影响AUTO_INCREMENT列的处理。一般情况,你可以向该列插入NULL0生成下一个序列号。

NO_AUTO_VALUE_ON_ZERO禁用0,因此只有NULL可以生成下一个序列号。

如果将0保存到表的AUTO_INCREMENT列,该模式会很有用。

NO_BACKSLASH_ESCAPES

禁用反斜线字符(‘\’)做为字符串内的退出字符。启用该模式,反斜线则成为普通字符。

9043E8E0CF8E45A49AA3F064217A02D6

NO_DIR_IN_CREATE

创建表时,忽视所有INDEX DIRECTORYDATA DIRECTORY指令。该选项对从复制服务器有用。

NO_ENGINE_SUBSTITUTION

如果需要的存储引擎被禁用或未编译,抛出错误,默认情况下用默认的存储引擎。   可以防止自动替换存储引擎。

没弄明白的选项

1 NO_FIELD_OPTIONS

不要在SHOW CREATE TABLE的输出中打印MySQL专用列选项。该模式在可移植模式(portability mode)下用于mysqldump

NO_KEY_OPTIONS

不要在SHOW CREATE TABLE的输出中打印MySQL专用索引选项。该模式在可移植模式(portability mode)下用于mysqldump

NO_TABLE_OPTIONS

不要在SHOW CREATE TABLE的输出中打印MySQL专用表选项(例如ENGINE)。该模式在可移植模式(portability mode)下用于mysqldump

 NO_UNSIGNED_SUBTRACTION