【发布时间】:2013-12-20 19:57:01
【问题描述】:
通过 MySQL 命令行客户端,我正在尝试设置全局 mysql_mode:
SET GLOBAL sql_mode = TRADITIONAL;
这适用于当前会话,但在我重新启动服务器后,sql_mode 会恢复为默认值:'',一个空字符串。
如何将 sql_mode 永久设置为 TRADITIONAL?
如果相关,MySQL 是 WAMP 包的一部分。
谢谢。
【问题讨论】:
通过 MySQL 命令行客户端,我正在尝试设置全局 mysql_mode:
SET GLOBAL sql_mode = TRADITIONAL;
这适用于当前会话,但在我重新启动服务器后,sql_mode 会恢复为默认值:'',一个空字符串。
如何将 sql_mode 永久设置为 TRADITIONAL?
如果相关,MySQL 是 WAMP 包的一部分。
谢谢。
【问题讨论】:
MySQL sql_mode "TRADITIONAL",又名“严格模式”,由the MySQL docs 定义为:
在向列中插入不正确的值时“给出错误而不是警告”。
以下是确保您的 sql_mode 设置为 "TRADITIONAL" 的方法。
首先,检查您的当前设置:
mysql
mysql> SELECT @@GLOBAL.sql_mode;
+-------------------+
| @@GLOBAL.sql_mode |
+-------------------+
| |
+-------------------+
1 row in set (0.00 sec)
这返回空白,默认值,这很糟糕:您的 sql_mode 未设置为“TRADITIONAL”。
所以编辑配置文件:
sudo vim /etc/mysql/my.cnf
在标记为[mysqld] 的部分中添加这一行:sql_mode="TRADITIONAL"(正如fancyPants 指出的那样)
然后重启服务器:
sudo service mysql restart
然后再次检查:
mysql
mysql> SELECT @@GLOBAL.sql_mode;
+------------------------------------------------------------------------------------------------------------------------------------------------------+
| @@GLOBAL.sql_mode |
+------------------------------------------------------------------------------------------------------------------------------------------------------+
| STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
成功!你现在是金子了。
【讨论】:
sql_mode 而不是 sql-mode。我现在刚试了一下,设置sql_mode = ""并重新启动服务器可以清除所有设置。
将此添加到您的 my.cnf 文件(或 my.ini,如果您使用 Windows):
sql_mode="TRADITIONAL"
然后重启服务器
【讨论】: