Как избавиться от строгого режима 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. Сработало отлично!