MySQL промени стойността по подразбиране на променливата sql_mode от предишни издания, което нарушава съществуващия код в няколко приложения. Този урок обяснява как да промените sql_mode според характеристиките на приложението. Той също така предоставя стъпките за запазване на тази стойност при рестартиране на сървъра.
Бележки :Можете също да следвате уроците за MySQL – Как да инсталирате MySQL 8 в Ubuntu, Как напълно да премахнете MySQL от Ubuntu и да научите основни SQL заявки с помощта на MySQL.
Стойността по подразбиране на променливата sql_mode в MySQL 8 е, както е показано по-долу.
# Default - sql_mode
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
В моя случай опцията ONLY_FULL_GROUP_BY нарушава кода, следователно ще го премахна за демонстрация
Актуализиране директно
Можем директно да актуализираме стойността на sql_mode като използвате командите, както е показано по-долу.
# Login
mysql -u root -p
# Globally
SET GLOBAL sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION";
# Session
SET SESSION sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION";
Стойността sql_mode ще бъде променена с помощта на гореспоменатите заявки. Проблемът е, че променливата връща стойността си по подразбиране при рестартиране на сървъра. Можем да запазим стойността, както е показано в следващия раздел.
Постоянно актуализиране
Можем да запазим стойността на sql_mode, като актуализираме my.cnf файл. Местоположението на този файл се различава в зависимост от средата и версията на сървъра. Най-често срещаните местоположения на този файл включват/etc/my.
НаLinux Mint 18 , местоположението на файла е /
# Search the default config
mysqld --verbose --help | grep -A 1 "Default options"
# Output
Default options are read from the following files in the given order: /etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf
MySQL сървърът ще разгледа гореспоменатите места за конфигурации по подразбиране както на системно ниво, така и на локално ниво. Актуализирайте файла my.cnf, както е показано по-долу. Използвах нано редактора за демонстрация
# Update my.cnf
sudo nano /etc/mysql/my.cnf
# Scroll down and update the file as shown below
...
...
# # The MySQL Server configuration file. # # For explanations see # http://dev.mysql.com/doc/mysql/en/server-system-variables.html # * IMPORTANT: Additional settings that can override those from this file! # The files must end with '.cnf', otherwise they'll be ignored. # !includedir /etc/mysql/conf.d/ !includedir /etc/mysql/mysql.conf.d/ [mysqld] sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"
Сега запазете файла и излезте от редактора. Не забравяйте да включите [mysqld] над променливата.
Рестартирайте MySQL сървъра, за да зададете стойността на променливата sql_mode, както е конфигурирана от нас във файла my.cnf, както е показано по-горе.
# Using init
sudo /etc/init.d/mysqld restart
# OR
sudo /etc/init.d/mysql restart
# Using service
sudo service mysql restart
# Using systemd
sudo systemctl restart mysqld.service
# OR
sudo systemctl restart mysql
Резюме
В този урок актуализирахме стойността на променливата MySQL sql_mode и го запази за постоянно при рестартиране на сървъра.