Mysql
 sql >> Base de données >  >> RDS >> Mysql

Mettre à jour le mode SQL dans MySQL

MySQL a changé la valeur par défaut de la variable sql_mode depuis les versions précédentes, ce qui casse le code existant dans plusieurs applications. Ce tutoriel explique comment modifier le sql_mode en fonction des fonctionnalités de l'application. Il fournit également les étapes pour conserver cette valeur au redémarrage du serveur.

Remarques  :Vous pouvez également suivre les didacticiels MySQL - Comment installer MySQL 8 sur Ubuntu, Comment supprimer complètement MySQL d'Ubuntu et Apprendre les requêtes SQL de base à l'aide de MySQL.

La valeur par défaut de la variable sql_mode dans MySQL 8 est comme indiqué ci-dessous.

# 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

Dans mon cas, l'option ONLY_FULL_GROUP_BY casse le code, donc je vais le supprimer pour démonstration but .

Mettre à jour directement

Nous pouvons directement mettre à jour la valeur de sql_mode en utilisant les commandes comme indiqué ci-dessous.

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

La valeur sql_mode sera modifiée à l'aide des requêtes mentionnées ci-dessus. Le problème est que la variable récupère sa valeur par défaut au redémarrage du serveur. Nous pouvons conserver la valeur comme indiqué dans la section suivante.

Mettre à jour en permanence

Nous pouvons conserver la valeur de sql_mode en mettant à jour my.cnf dossier. L'emplacement de ce fichier diffère en fonction de l'environnement et de la version du serveur. Les emplacements les plus courants de ce fichier incluent/etc/my. cnf , /etc/mysql /mon.cnf , et /usr /etc/mon.cnf . Il peut également se trouver sur le chemin local de l'utilisateur ~/.my.cnf . Sur mon système ayant Ubuntu 18.04 LTS et MySQL 8, j'ai trouvé ce fichier à /etc/mysql /mon.cnf .

Sur Linux Mint 18 , l'emplacement du fichier est /usr /mon.cnf . Vous pouvez également rechercher le fichier à l'aide de la commande comme indiqué ci-dessous.

# 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

Le serveur MySQL examinera les emplacements mentionnés ci-dessus pour les configurations par défaut à la fois au niveau du système et au niveau local. Mettez à jour le fichier my.cnf comme indiqué ci-dessous. J'ai utilisé l'éditeur nano pour la démonstration but .

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

Enregistrez maintenant le fichier et quittez l'éditeur. Assurez-vous d'inclure [mysqld] au-dessus de la variable.

Redémarrez le serveur MySQL pour définir la valeur de la variable sql_mode telle que configurée par nous dans le fichier my.cnf comme indiqué ci-dessus.

# 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

Résumé

Dans ce tutoriel, nous avons mis à jour la valeur de la variable MySQL sql_mode et l'a également conservé en permanence au redémarrage du serveur.