Как избавиться от режима STRICT SQL в MySQL
Это соответствует следующему вопросу Неверный формат DATETIME 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
- ничего не помогло.
Ответы
Ответ 1
Итак, в конце я удалил MySQL-сервер, который я получил с mysql.com, переустановил его через Homebrew и должен был отредактировать
/usr/local/Cellar/mysql/5.6.xx/my.cnf
Где я мог бы прокомментировать проклятый STRICT_TRANS_TABLES
.
Однако это не объясняет, почему по умолчанию config переопределяет значение из /etc/my.cnf
, но я потратил слишком много времени на это уже, как есть. И, кстати, я все еще не уверен, что делать с предоставленным mysql.com дистрибутивом.
Ответ 2
Эта проблема тоже помогала мне. Ни один из ответов до сих пор не рассматривал первоначальную проблему, но я считаю, что моя делает так, что я опубликую ее, если она поможет кому-то еще.
У меня есть MySQL (от mysql.com) Community Edition 5.7.10, установленный в OS X 10.10.3
В конце я создал /etc/mysql/my.cnf
со следующим содержимым: -
[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION
После перезапуска сервера a SHOW VARIABLES LIKE 'sql_mode';
дал мне: -
+---------------+------------------------+
| Variable_name | Value |
+---------------+------------------------+
| sql_mode | NO_ENGINE_SUBSTITUTION |
+---------------+------------------------+
1 row in set (0.00 sec)
Наконец, нет строгой моды!
Ответ 3
В 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
Ответ 4
В соответствии с MySQL Strict Mode в OS X проблемный параметр на самом деле находится в /usr/local/mysql/my.cnf
и может быть прокомментирован, чтобы остановить это поведение.
Ответ 5
Я пробовал каждый ответ, который мог найти по этой проблеме, используя 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 просто не работают.) Пока у вас есть параметр sql_mode в my.cnf, не включает строгий режим, строгий режим должен быть выключен.
Ответ 6
Теперь вы не можете установить 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
Ответ 7
Вам нужно искать как sql-mode, так и sql_mode, если есть существующая настройка. http://it.i88.ca/2014/03/how-to-get-rid-of-strict-sql-mode-in.html
Ответ 8
В Mac OS X El Capitan я создал файл .my.cnf в домашнем каталоге пользователя и установил параметры для mysql в [mysqld]
, а затем перезапустил mysql. Отлично работает!