您的位置:首页 > 数据库 > MySQL

Mysql的SQL_MODE

2015-07-31 22:12 281 查看
一、概念

不同的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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: