您的位置:首页 > 数据库

SQL_MODE 的设置

2019-06-05 23:46 1441 查看
[td]/etc/my.cnf

查看当前的 SQL_MODE

SELECT @@sql_mode
SELECT @@sql_mode 的执行结果
mysql> SELECT @@sql_mode;
+-----------------------------------------------------------------------------------------------------------------------+
| @@sql_mode                                                                                                            |
+-----------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
+-----------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

设置 SQL_MODE

设置 SQL_MODE 是通过

SET
关键词进行的,其他参数值也可通过该关键词进行修改。可通过
SHOW VARIABLES
查看到所有可用配置项。

设置系统变量时,可指定所设置的作用域,也可通过

@@
前缀来获取变量,甚至也可以没有任何前缀,以下写法都是合法的:

SET SESSION sql_mode = 'TRADITIONAL';
SET LOCAL sql_mode = 'TRADITIONAL';
SET @@SESSION.sql_mode = 'TRADITIONAL';
SET @@LOCAL.sql_mode = 'TRADITIONAL';
SET @@sql_mode = 'TRADITIONAL';
SET sql_mode = 'TRADITIONAL';

可用的 SQL 模式可在官方文档中查询到 5.1.10 Server SQL Modes

系统变量的作用域

There are two scopes in which system variables exist. Global variables affect the overall operation of the server. Session variables affect its operation for individual client connections. A given system variable can have both a global and a session value.

--5.1.9 Using System Variables

系统的这些配置项有其作用项,是分开进行管理的。

其中,

  • GLOBAL
    类型会对每次连接生效。
  • SESSION
    类型只对当前连接生效,
    LOCAL
    关键词等效。

两者皆为运行时变量,可随时修改。

  • PERSIST
    类型不影响运行时,会将设置结果写入
    mysqld-auto.cnf
    这个 MySQL 配置文件。

所以,设置时可通过在

SET
后加相应作用域的修饰词,像这样

SET GLOBAL sql_mode = 'NO_ENGINE_SUBSTITUTION';

也可以通过

@@
加上作用域进行变量访问的方式:

SET @@GLOBAL.sql_mode = 'NO_ENGINE_SUBSTITUTION';

两者是等效的。

作用域缺省情况下为

SESSION
类型,即只对当前连接生效。

SET @@sql_mode = 'NO_ENGINE_SUBSTITUTION';

MySQL 中的配置文件

下面表格来自官方文档 Table 4.2 Option Files Read on Unix and Unix-Like Systems 部分。

[table] [tr]
文件 用途
全局配置项
/etc/mysql/my.cnf 全局配置项
SYSCONFDIR/my.cnf 全局配置项
$MYSQL_HOME/my.cnf 服务器相关配置项,有于服务端
defaults-extra-file 如果存在该文件的话,通过
--defaults-extra-file
参数启用程序时会读取该配置项
~/.my.cnf 用户配置项
~/.mylogin.cnf 用户登录路径相关,用于客户端
DATADIR/mysqld-auto.cnf
SET PERSIST
SE PERSIST_ONLY
设置的系统参数会保存到该文件

相交资源

[/td] [/tr] [/table]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: