Как отключить строгие таблицы TRANS для сервера MySQL, установленного Homebrew?
кажется, что MySQL недавно (5.6?) изменен режим SQL по умолчанию, чтобы быть более строгими. Новый режим - "STRICT_TRANS_TABLES, NO_ENGINE_SUBSTITUTION". Мне нравится изменение, но по крайней мере один веб-сайт, который я поддерживаю, не делает. Запросы INSERT не выполняются, поскольку они не задают значения для столбцов, не имеющих значений по умолчанию. Раньше MySQL выводил значения по умолчанию по типу столбца.
пока я хочу отключить STRICT_TRANS_TABLES. Я добавил sql_mode=NO_ENGINE_SUBSTITUTION
to my.cnf
и перезапустить сервер, но строгий параметр сохраняется. Что я делаю не так?
версия MySQL:
$ mysqld --version
mysqld Ver 5.6.15 for osx10.9 on x86_64 (Homebrew)
мой.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
подтвердите, что mysqld будет использовать настройки в моем.cnf:
$ mysqld --print-defaults
mysqld would have been started with the following arguments:
--sql_mode=NO_ENGINE_SUBSTITUTION
подтвердите, что mysqld в настоящее время не работает:
$ ps aux | grep mysql
metaphile 1022 0.0 0.0 2432784 600 s003 S+ 3:10PM 0:00.00 grep mysql
список свойств, предоставляемых 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>
запустите 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)
Аргх!
5 ответов
на Centos 6.5 мне пришлось редактировать /usr/my.cnf
и установить (хотя /etc/my.cnf
существовали и привязки были успешно установлены там
[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION
@ssnobody's ответ побудил меня искать всю мою систему для моего.файлы cnf. Я уже проверил места, перечисленные mysqld --help --verbose
. Оказывается, мой сервер использует /usr/local/Cellar/mysql/5.6.15/my.cnf
который я ошибочно принял за образец файла. Файл не имеет символической ссылки ни из одного из стандартных местоположений, включая /usr/local/mysql
.
может кто-нибудь пролить свет на это? Это домашнее пиво? Как я мог понять это, кроме как путем внесения тестовых изменений в каждый мой.cnf, что я мог найти?
пожалуйста, проверьте /usr/local/mysql/my.cnf
и прокомментируйте проблемную настройку.
источник: строгий режим MySQL на OS X
чтобы просто отключить STRICT_TRANS_TABLES для определенного скрипта,
set session sql_mode = '';
при инициализации дескриптора БД в скрипте. Это также отключит NO_ENGINE_SUBSTITUTION, поэтому просто
set session sql_mode = 'NO_ENGINE_SUBSTITUTION';
оставим нетронутыми.