如何在MySQL中摆脱STRICT SQL模式

时间:2013-09-12 10:54:27

标签: mysql macos configuration homebrew sql-mode

这是对此问题的跟进MYSQL incorrect 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下载了它。但这也没有帮助。在这里得到答案:How to fix `unknown variable 'sql-mode=ANSI'`?我尝试了/etc/my.cnf的不同变体:[mysql][mysqld]sql_modesql-mode - 没有任何帮助。< / p>

8 个答案:

答案 0 :(得分:40)

这个问题也让我感到震惊了一段时间。到目前为止,没有一个答案解决了原始问题,但我相信我的确如此,我会发布它,以防它帮助其他任何人。

我在OS X 10.10.3上安装了MySQL(来自mysql.com)Community Edition 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)

最后,没有严格的模式!

答案 1 :(得分:14)

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

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

我可以在哪里发表评论STRICT_TRANS_TABLES

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

答案 2 :(得分: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

答案 3 :(得分:6)

根据MySQL Strict Mode on OS X,有问题的设置实际上位于/usr/local/mysql/my.cnf,可以注释掉以停止此行为。

答案 4 :(得分: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

答案 5 :(得分:2)

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

我最初使用MySQL Workbench 6.2.3.12313创建my.cnf。这导致了两个可能的问题:首先,它将选项设置为&#34; sql-mode&#34;而不是&#34; sql_mode&#34;,它使文件(位于/ etc)只对root可读写。当你按照我的方式安装它时,MySQL不会以root身份运行,从MySQL网站上的二进制包开始 - 它作为_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的功能根本不起作用。)只要你有一个sql_mode在my.cnf中设置不涉及严格模式,严格模式应该关闭。

答案 6 :(得分:0)

如果存在设置,您需要搜索sql-mode和sql_mode。 http://it.i88.ca/2014/03/how-to-get-rid-of-strict-sql-mode-in.html

答案 7 :(得分:0)

在Mac OS X上,El Capitan在用户主目录中创建了一个文件.my.cnf,并在while count < 10 and len(post_list) < 5: 下设置了mysql的设置,然后重新启动了mysql。工作得很好!