Подтвердить что ты не робот

Установка глобального sql_mode в mysql

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

Команда:

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

Это не правильный способ установить несколько режимов? В чем преимущества настройки сеансовых и глобальных режимов? который предлагается? У меня разные пользователи, пытающиеся обновить базу данных разными значениями UNC и установили режим сеанса в режим "NO_BACKSLASH_ESCAPES", хотя для этого было бы разумно использовать gloabl-режим. Это имеет смысл?

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

Спасибо.

4b9b3361

Ответ 1

Я разрешил это.

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

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

Ответ 2

Кстати, если вы установите глобалы в 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.

Ответ 3

Настройка режима 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, и вы должны получить режимы, которые вы только что установили.

Ответ 4

Скопировать в файл конфигурации: /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

Для тех, кто гуглит эту ошибку для 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}

Ответ 6

В моем случае я должен изменить файл /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"

Ответ 7

Если кто-то хочет установить его только для текущего сеанса, используйте следующую команду

set session sql_mode="NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLE,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

Ответ 8

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