33

通过 MySQL 命令行客户端,我正在尝试设置全局 mysql_mode:

SET GLOBAL sql_mode = TRADITIONAL;

这适用于当前会话,但在我重新启动服务器后,sql_mode 会恢复为默认值:'',一个空字符串。

如何将 sql_mode 永久设置为 TRADITIONAL?

如果相关,MySQL 是 WAMP 包的一部分。

谢谢你。

4

3 回答 3

29

MySQL sql_mode "TRADITIONAL",又名“严格模式”,由MySQL 文档定义为:

向列中插入不正确的值时“给出错误而不是警告”。

以下是如何确保您的 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)

成功!你现在是金色的。

于 2016-08-05T10:13:17.800 回答
25

将此添加到您的 my.cnf 文件(如果您使用的是 Windows,则添加到 my.ini):

sql_mode="TRADITIONAL"

并重新启动服务器

于 2013-12-04T11:04:20.143 回答
0

对于windows上的mysql8:

# Set the SQL mode to strict
sql-mode="NO_ENGINE_SUBSTITUTION"

这是一个破折号,而不是下划线:sql_mode / sql-mode

于 2022-03-03T10:11:17.430 回答