Mysql的SQL_MODE

一、概念
不同的SQL_MODE代表着不同的Mysql Server工作模式。


二、设置
2.1、可以通过配置文件和命令行来设置Mysql Server的SQL_MODE
2.2、有全局SQL_MODE和会话SQL_MODE之分
2.3、查看全局SQL_MODE和会话SQL_MODE的命令分别为:
SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;


三、重要的SQL_MODE值
"TRADITIONAL":该SQL_MODE使得"inserting an incorrect value into a column"的时候,抛出ERROR,而不是WARNING。


与其等价的SQL_MODE有:
STRICT_TRANS_TABLES, STRICT_ALL_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, and NO_ENGINE_SUBSTITUTION


四、JDBC Driver默认设置SQL_MODE
以JDBC Driver作为Mysql Client与Mysql Server交互时,JDBC Driver默认会设置会话SQL_MODE='STRICT_TRANS_TABLES',可以通过"SELECT @@SESSION.sql_mode"语句来进行验证
根据“三、重要的SQL_MODE值”,因而可以获知,使用JDBC Driver作为Mysql Client,碰到"inserting an incorrect value into a column"的情况的时候,会抛出ERROR,而不是WARNING
JDBC Driver默认会设置会话SQL_MODE='STRICT_TRANS_TABLES'的原因是:"enforce JDBC compliance on truncation checks"需要开启"STRICT_TRANS_TABLES"这个SQL_MODE,而在JDBC URL中存在着"jdbcCompliantTruncation"这个参数,该参数可以控制是否开启"enforce JDBC compliance on truncation checks"功能,当我们通过JDBC URL设定"jdbcCompliantTruncation=false"之后,也就不会去默认设置SQL_MODE='STRICT_TRANS_TABLES'了


参考文献:
[1]http://dev.mysql.com/doc/refman/5.6/en/sql-mode.html
[2]https://bugs.mysql.com/bug.php?id=23371
[3]https://babbage.inf.unibz.it/trac/obdapublic/wiki/ObdalibPluginJDBC
[4]http://dev.mysql.com/doc/connector-j/en/connector-j-reference-configuration-properties.html

你可能感兴趣的:(数据库)