Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Aktualisieren Sie den SQL-Modus in MySQL

MySQL hat den Standardwert der Variable sql_mode geändert seit früheren Versionen, wodurch der vorhandene Code in mehreren Anwendungen beschädigt wird. In diesem Tutorial wird erläutert, wie Sie den sql_mode entsprechend den Anwendungsfunktionen ändern. Es enthält auch die Schritte zum Beibehalten dieses Werts beim Neustart des Servers.

Notizen :Sie können auch den MySQL-Tutorials folgen – How To Install MySQL 8 on Ubuntu, How To Completely Remove MySQL From Ubuntu, and Learn Basic SQL Queries Using MySQL.

Der Standardwert der Variable sql_mode in MySQL 8 ist wie unten gezeigt.

# 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

In meinem Fall die Option ONLY_FULL_GROUP_BY bricht den Code, daher werde ich ihn zu Demonstrationszwecken Zweck entfernen .

Direkt aktualisieren

Wir können den Wert von sql_mode direkt aktualisieren mit den unten gezeigten Befehlen.

# 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";

Der sql_mode-Wert wird mit den oben genannten Abfragen geändert. Das Problem ist, dass die Variable beim Neustart des Servers ihren Standardwert zurückerhält. Wir können den Wert wie im nächsten Abschnitt gezeigt beibehalten.

Dauerhaft aktualisieren

Wir können den Wert von sql_mode beibehalten, indem wir my.cnf aktualisieren Datei. Der Speicherort dieser Datei ist je nach Serverumgebung und -version unterschiedlich. Die häufigsten Speicherorte dieser Datei sind /etc/my. cnf , /etc/mysql /my.cnf und /usr /etc/my.cnf . Es kann sich auch im lokalen Pfad des Benutzers ~/.my.cnf befinden . Auf meinem System mit Ubuntu 18.04 LTS und MySQL 8 fand ich diese Datei unter /etc/mysql /my.cnf .

Auf Linux Mint 18 , der Speicherort der Datei ist /usr /my.cnf . Sie können die Datei auch mit dem unten gezeigten Befehl durchsuchen.

# 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

Der MySQL-Server sucht an den oben genannten Orten nach den Standardkonfigurationen sowohl auf Systemebene als auch auf lokaler Ebene. Aktualisieren Sie die Datei my.cnf wie unten gezeigt. Ich habe den Nano-Editor zu Demonstrationszwecken Zweck verwendet .

# 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"

Speichern Sie nun die Datei und beenden Sie den Editor. Achten Sie darauf, [mysqld] einzuschließen über der Variable.

Starten Sie den MySQL-Server neu, um den Wert der Variable sql_mode wie von uns konfiguriert in der Datei my.cnf wie oben gezeigt zu setzen.

# 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

Zusammenfassung

In diesem Tutorial haben wir den Wert der MySQL-Variablen sql_mode aktualisiert und auch beim Serverneustart dauerhaft erhalten.