查看当前的 SQL_MODE

SELECT @@sql_mode

设置 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

系统变量的作用域

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

其中,

  • 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 部分。

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

相交资源

05-23 06:23