如何在MySQL中摆脱严格的SQL模式



这是这个问题的后续 MYSQL 不正确的日期时间格式

如何一劳永逸地摆脱STRICT_TRANS_TABLES?

mysql --help报告以下配置:

Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf
$ ls  /etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf
ls: /Users/pain/.my.cnf: No such file or directory
ls: /etc/mysql/my.cnf: No such file or directory
ls: /usr/local/etc/my.cnf: No such file or directory
/etc/my.cnf
$ cat /etc/my.cnf
[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION

但这无济于事。我有一些遗留代码,每次重新启动计算机时,我都必须启动mysql并更改sql_mode。

更新

所以我放弃了Homebrew安装的MySQL,并从 mysql.com 下载了它。但这也无济于事。按照这里的答案: 如何修复"未知变量'sql-mode=ANSI'"?我尝试了/etc/my.cnf的不同变体:[mysql][mysqld]sql_modesql-mode——没有任何帮助。

这个问题也困扰了我一段时间。 到目前为止,没有一个答案解决了原始问题,但我相信我的答案可以解决,所以我会发布它,以防它对其他人有帮助。

我在OS X 10.10.3上安装了MySQL(来自 mysql.com)社区版5.7.10

最后,我创建了一个包含以下内容的/etc/mysql/my.cnf:-

[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION

重新启动服务器后,一个SHOW VARIABLES LIKE 'sql_mode';给了我:-

+---------------+------------------------+
| Variable_name | Value                  |
+---------------+------------------------+
| sql_mode      | NO_ENGINE_SUBSTITUTION |
+---------------+------------------------+
1 row in set (0.00 sec)

最后,没有严格模式!

所以最后我删除了我从 mysql.com 获得的MySQL服务器,通过Homebrew重新安装它,并且必须编辑

/usr/local/Cellar/mysql/5.6.xx/my.cnf

我可以在哪里注释掉的STRICT_TRANS_TABLES.

然而,这并不能解释为什么默认配置会覆盖 /etc/my.cnf 中的配置,但我已经花了很多时间在上面了。顺便说一句,我仍然不确定如何处理 mysql.com 提供的发行版。

在 Centos 6.5 上,我不得不编辑/usr/my.cnf 和设置(即使/etc/my.cnf存在并且绑定已成功设置在那里

[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION

包裹来自:

mysql-community-client.x86_64      5.6.16-1.el6            @mysql56-community

根据OS X上的MySQL严格模式,有问题的设置实际上是/usr/local/mysql/my.cnf,可以注释掉以阻止此行为。

现在不能将sql_mode设置为空字符串,实际查询为:

SET @@GLOBAL.sql_mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

MySQL 5.7.16

我在Mac OS 10.12上使用MySQL 5.7尝试了有关此问题的所有答案,最终关闭了严格模式,不是因为my.cnf的位置,它可能在MySQL说它检查的任何地方,而是由于UNIX权限问题。

我最初使用 MySQL Workbench 6.2.3.12313 来创建 my.cnf。这导致了两个可能的问题:首先,它将选项设置为"sql-mode"而不是"sql_mode",并且它使文件(位于/etc 中)仅对 root 可读和可写。当您像我那样从MySQL网站上的二进制包安装MySQL时,MySQL不会以root身份运行 - 它以_mysql运行。因此,_mysql用户需要能够读取/etc/my.cnf,或者你把它放在任何地方。为了使其正常工作,您需要运行:

sudo chmod o+r /etc/my.cnf

为了更好地衡量,您可能还想运行:

sudo chmod g+r /etc/my.cnf

然后确保重新启动MySQL。(我发现这在Mac OS上的系统偏好设置MySQL面板上效果最好;使用命令行有点混乱,MySQL Workbench的功能根本不起作用。只要 my.cnf 中有一个不涉及严格模式的sql_mode设置,严格模式就应该关闭。

在Mac OS X El Capitan上,我在用户主页目录中创建了一个文件.my.nf,并在[mysqld]下设置了mysql的设置,然后重新启动mysql。工作正常!

相关内容

  • 没有找到相关文章

最新更新