如何为Homebrew安装的MySQL服务器禁用STRICT_TRANS_TABLES?

Met*_*ile 16 mysql macos homebrew

似乎MySQL最近(5.6?)将默认的SQL模式更改为更具限制性.新模式为"STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION".我喜欢这个改变,但至少有一个我维护过的网站没有.INSERT查询失败,因为它们没有为没有默认值的列指定值.之前,MySQL会按列类型推断默认值.

现在,我想禁用STRICT_TRANS_TABLES.我已经加入sql_mode=NO_ENGINE_SUBSTITUTIONmy.cnf并重新启动服务器,但严格的设置仍然存在.我究竟做错了什么?

MySQL版本:

$ mysqld --version
mysqld  Ver 5.6.15 for osx10.9 on x86_64 (Homebrew)
Run Code Online (Sandbox Code Playgroud)

my.cnf文件:

$ cat /etc/my.cnf
[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION

# not sure if this is needed but it doesn't seem to have an effect either way
[mysqld_safe]
sql_mode=NO_ENGINE_SUBSTITUTION
Run Code Online (Sandbox Code Playgroud)

确认mysqld将使用my.cnf中的设置:

$ mysqld --print-defaults
mysqld would have been started with the following arguments:
--sql_mode=NO_ENGINE_SUBSTITUTION
Run Code Online (Sandbox Code Playgroud)

确认mysqld当前没有运行:

$ ps aux | grep mysql
metaphile        1022   0.0  0.0  2432784    600 s003  S+    3:10PM   0:00.00 grep mysql
Run Code Online (Sandbox Code Playgroud)

房地产列表由Homebrew提供:

$ cat ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>KeepAlive</key>
  <true/>
  <key>Label</key>
  <string>homebrew.mxcl.mysql</string>
  <key>ProgramArguments</key>
  <array>
    <string>/usr/local/opt/mysql/bin/mysqld_safe</string>
    <string>--bind-address=127.0.0.1</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
  <key>WorkingDirectory</key>
  <string>/usr/local/var</string>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud)

启动MySQL并检查SQL模式:

$ launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
$ mysql -uroot
...
mysql> SELECT @@GLOBAL.sql_mode, @@SESSION.sql_mode;
+--------------------------------------------+--------------------------------------------+
| @@GLOBAL.sql_mode                          | @@SESSION.sql_mode                         |
+--------------------------------------------+--------------------------------------------+
| STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
+--------------------------------------------+--------------------------------------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

哎呀!

小智 22

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

[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION
Run Code Online (Sandbox Code Playgroud)

  • 这实际上是正确的答案.事实证明,如果你在CentOS上升级到MySQL 5.6,它会安装一个/usr/my.cnf文件,无论/etc/my.cnf文件如何都会被读取. (3认同)

Met*_*ile 7

@ ssnobody的回答促使我在我的整个系统中搜索my.cnf文件.我已经检查了列出的位置mysqld --help --verbose.事实证明我的服务器正在使用/usr/local/Cellar/mysql/5.6.15/my.cnf我错误地认为是一个示例文件.该文件未从任何标准位置进行符号链接,包括/usr/local/mysql.

任何人都可以对此有所了解吗?这是Homebrew的事吗?除了通过对我能找到的每个my.cnf进行测试修改,我怎么能想到这个呢?

  • 如果您使用brew,只需键入brew list mysql即可.它将列出mysql配置文件的所有选项 (4认同)