Как избавиться от строгого режима 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.
обновление
поэтому я отказался от Homebrew-установленного MySQL и скачал его из mysql.com - ... Но и это не помогло. Следующие ответы здесь:как исправить "неизвестную переменную" sql-mode=ANSI"? Я пробовал разные варианты /etc/my.cnf
: [mysql]
, [mysqld]
, sql_mode
, sql-mode
– ничего не помогало.
8 ответов
эта проблема меня тоже на некоторое время расстроила. Ни один из ответов до сих пор не касался исходной проблемы, но я считаю, что мой делает это, я опубликую его, если это поможет кому-то еще.
у меня есть 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)
наконец, нет строгих режим!
поэтому в конце концов я удалил сервер MySQL, который я получил от mysql.com, переустановил его через Homebrew и должен был редактировать
/usr/local/Cellar/mysql/5.6.xx/my.cnf
где я мог бы прокомментировать проклятые STRICT_TRANS_TABLES
.
однако это не объясняет, почему конфигурация по умолчанию переопределяет конфигурацию из /etc/my.cnf
, но я потратил слишком много времени на это уже как то. И, кстати, я до сих пор не уверен, что делать с mysql.com при условии распространения.
на 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 на 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 и в конечном итоге получил строгий режим, отключенный не из-за местоположения моего.cnf, который предположительно может быть в любом из мест, которые MySQL говорит, что он проверяет, но благодаря проблеме разрешений UNIX.
я использовал MySQL Workbench 6.2.3.12313 для создания моего.cnf первоначально. Это вызвало две возможные проблемы: во-первых, он установил опцию "sql-mode "вместо " sql_mode", и он сделал файл (расположенный в /etc) чтение и запись только для root. MySQL не работает как root, когда вы устанавливаете его так, как я, из двоичного пакета на веб-сайте MySQL-он работает как _mysql. Таким образом, пользователь _mysql должен иметь возможность читать /etc/my.Си-эн-эн-эн, или куда вы его там положили. Для того, чтобы это сработало, вам нужно запустить:
sudo chmod o+r /etc/my.cnf
и для хорошей меры вы также можете запустить:
sudo chmod g+r /etc/my.cnf
затем обязательно перезапустите MySQL. (Я обнаружил, что это лучше всего работает через системные настройки MySQL панель на Mac OS; использование командной строки является своего рода беспорядочным и функциональность MySQL Workbench просто не работает.) Пока у вас есть параметр sql_mode в my.cnf, который не включает строгий режим, строгий режим должен быть выключен.
вам нужно искать как sql-mode, так и sql_mode, если есть существующая настройка. http://it.i88.ca/2014/03/how-to-get-rid-of-strict-sql-mode-in.html
на Mac OS X El Capitan я создал файл .мой.cnf в домашнем директории пользователя и установите настройки для mysql под [mysqld]
а затем перезапустил mysql. Сработало отлично!