24

这是对这个问题的跟进MYSQL wrong DATETIME format

如何一劳永逸地摆脱 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_mode, sql-mode– 没有任何帮助。

4

7 回答 7

42

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

我在 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)

最后,没有严格模式!

于 2015-12-23T00:42:44.153 回答
14

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

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

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

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

于 2014-03-08T05:52:08.760 回答
9

在 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
于 2014-03-14T10:41:35.997 回答
6

根据OS X 上的 MySQL 严格模式,有问​​题的设置实际上是在/usr/local/mysql/my.cnf并且可以被注释掉以停止这种行为。

于 2013-12-13T22:28:15.667 回答
3

现在您不能将 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

于 2016-11-24T12:47:34.107 回答
3

我尝试了在 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 时,它不会以 root 身份运行——它以 _mysql 运行。所以 _mysql 用户需要能够读取 /etc/my.cnf 或您放置的任何位置。为了使其工作,您需要运行:

sudo chmod o+r /etc/my.cnf

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

sudo chmod g+r /etc/my.cnf

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

于 2017-04-18T12:44:23.713 回答
0

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

于 2016-07-26T14:32:35.950 回答