Как избавиться от режима STRICT SQL в MySQL
Это продолжение этого вопроса MYSQL неверный формат DATETIME
Как избавиться от 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.
Обновить
Поэтому я отказался от MySQL, установленного на Homebrew, и загрузил его с сайта mysql.com. Но это тоже не помогло. После ответов здесь: Как исправить `неизвестную переменную 'sql-mode=ANSI'`? Я пробовал разные варианты /etc/my.cnf
: [mysql]
, [mysqld]
, sql_mode
, sql-mode
- ничего не помогло.
8 ответов
В итоге я удалил MySQL Server, полученный с mysql.com, переустановил его через Homebrew и должен был отредактировать
/usr/local/Cellar/mysql/5.6.xx/my.cnf
Где я мог закомментировать проклятый STRICT_TRANS_TABLES
,
Однако это не объясняет, почему конфигурация по умолчанию переопределяет /etc/my.cnf
, но я потратил слишком много времени на это уже как есть. И, кстати, я до сих пор не уверен, что делать с предоставленным mysql.com дистрибутивом.
Эта проблема на некоторое время также смутила меня. Ни один из ответов до сих пор не касался исходной проблемы, но я считаю, что мои ответы таковы, что я опубликую их на тот случай, если это кому-нибудь поможет.
У меня MySQL (из mysql.com) Community Edition 5.7.10 установлен на OS X 10.10.3
В конце концов я создал /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)
Наконец-то нет строгого режима!
На 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
В соответствии с MySQL Strict Mode на OS X проблемные настройки на самом деле в /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
Я пробовал каждый ответ, который смог найти по этому вопросу, используя MySQL 5.7 в Mac OS 10.12, и в итоге строгий режим был отключен не из-за расположения my.cnf, который, вероятно, может находиться в любом месте, которое MySQL говорит, что проверяет, но благодаря проблеме разрешений UNIX.
Я изначально использовал MySQL Workbench 6.2.3.12313 для создания my.cnf. Это вызвало две возможные проблемы: во-первых, он установил опцию "sql-mode" вместо "sql_mode", и сделал файл (расположенный в /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. (Я обнаружил, что это лучше всего работает через панель MySQL "Системные настройки" в Mac OS; использование командной строки довольно грязно, а функциональность MySQL Workbench просто не работает.) Пока в my.cnf есть параметр sql_mode, не включает строгий режим, строгий режим должен быть выключен.
В Mac OS X El Capitan я создал файл.my.cnf в домашнем каталоге пользователя и установил настройки для mysql в разделе [mysqld]
а затем перезапустил MySQL. Работал нормально!
Вам нужно выполнить поиск как в sql-mode, так и в sql_mode, в случае, если есть настройки. http://it.i88.ca/2014/03/how-to-get-rid-of-strict-sql-mode-in.html