这是这个问题的后续 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_mode
、sql-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。工作正常!