установка глобального sql_mode в mysql - PullRequest
61 голосов
/ 23 февраля 2010

Я пытаюсь установить sql_mode в mysql, но выдает ошибку.

Команда:

set global sql_mode='NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLE','NO_AUTO_CREATE_USER','NO_ENGINE_SUBSTITUTION'

Разве это не правильный способ установки нескольких режимов? Каковы преимущества настройки сеанса и глобальных режимов? что предпочтительнее? У меня есть разные пользователи, пытающиеся обновить базу данных с различными значениями UNC и установив od установки режима сеанса на «NO_BACKSLASH_ESCAPES», хотя для этого есть смысл использовать режим gloabl. Имеет ли это смысл?

Пожалуйста, дайте мне знать.

Спасибо.

Ответы [ 7 ]

151 голосов
/ 29 сентября 2014

Кстати, если вы установили глобалы в MySQL:

SET GLOBAL sql_mode = 'NO_ENGINE_SUBSTITUTION';
SET SESSION sql_mode = 'NO_ENGINE_SUBSTITUTION';

Это не установит его ПОСТОЯННО , и оно будет возвращаться после каждого перезапуска.

Таким образом, вы должны установить это в своем конфигурационном файле (например, /etc/mysql/my.cnf в разделе [mysqld]), чтобы изменения продолжали действовать после перезапуска MySQL:

Файл конфигурации: /etc/mysql/my.cnf

[mysqld] 
sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

ОБНОВЛЕНИЕ: более новые версии Mysql (например, 5.7.8 или выше) могут потребовать немного другого синтаксиса:

[mysqld]
sql-mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"

Убедитесь, что между sql-mode не стоит знак подчеркивания, а режимы заключены в двойные кавычки.

Всегда указывайте MySQL Docs для вашей версии, чтобы увидеть опции sql-mode .

21 голосов
/ 28 августа 2016

Настройка режима sql навсегда с помощью файла конфигурации mysql.

В моем случае я должен изменить файл /etc/mysql/mysql.conf.d/mysqld.cnf, так как mysql.conf.d включен в /etc/mysql/my.cnf. я изменяю это под [mysqld]

[mysqld]
sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

только что удален ONLY_FULL_GROUP_BY режим sql, потому что это вызывает проблему.

Я использую ubuntu 16.04, php 7, и mysql --version даст мне это mysql Ver 14.14 Distrib 5.7.13, for Linux (x86_64) using EditLine wrapper

После этого изменения запустите следующие команды

sudo service mysql stop
sudo service mysql start

Теперь проверьте режимы sql по этому запросу SELECT @@sql_mode, и вы должны получить только что установленные режимы.

19 голосов
/ 23 февраля 2010

Я решил это.

правильный режим:

set global sql_mode="NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLE,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
8 голосов
/ 25 июля 2016

Копировать в файл конфигурации: /etc/mysql/my.cnf OR /bin/mysql/my.ini

[mysqld]
port = 3306
sql-mode=""

MySQL перезагрузка.

Или вы также можете сделать

[mysqld]
port = 3306
SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";

MySQL перезагрузка.

5 голосов
/ 23 января 2019

Для тех, кто гуглит эту ошибку для MySQL 8.

MySQL 8.0.11 удаляет «NO_AUTO_CREATE_USER» из sql-режима.

MySQL 5.7: Использование GRANT для создания пользователей. Вместо этого используйте CREATE USER. Следуя этой практике, вы переключаетесь в режим SQL NO_AUTO_CREATE_USER несущественен для заявлений GRANT, поэтому он также не рекомендуется. MySQL 8.0.11: Использование GRANT для создания пользователей. Вместо этого используйте CREATE USER. Следуя этой практике, вы переключаетесь в режим SQL NO_AUTO_CREATE_USER несущественно для операторов GRANT, поэтому оно тоже удаляется.

Взято из здесь

Итак, вы sql_mode можете быть такими:

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

Или, если вы используете Docker, вы можете добавить следующую команду в docker-compose.yml

  mysql:
    image: mysql:8.0.13
    command: --sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
    ports:
      - 13306:${MYSQL_PORT}
1 голос
/ 10 октября 2017

В моем случае мне нужно изменить файл /etc/mysql/mysql.conf.d/mysqld.cnf изменить это в [mysqld]

Вставьте эту строку в [mysqld] часть

sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
0 голосов
/ 28 марта 2018
set global sql_mode="NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLE,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...