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

Comment désactiver le mode SQL strict dans MySQL 5.7

Si votre application a été écrite pour des versions antérieures de MySQL et n'est pas compatible avec le mode SQL strict dans MySQL 5.7, vous pouvez désactiver le mode SQL strict. Par exemple, des applications telles que WHMCS 6 et Craft 2 ne prennent pas en charge le mode SQL strict.

Si vous utilisez WHMCS 7, consultez notre article sur la personnalisation de MySQL pour WHMCS 7.

Pour désactiver le mode SQL strict, connectez-vous en SSH à votre serveur en tant que root et créez un nouveau fichier de configuration en utilisant nano ou l'éditeur de votre choix :

sudo nano /etc/mysql/conf.d/disable_strict_mode.cnf

Dans le fichier, saisissez ces deux lignes :

[mysqld]
sql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

Enregistrez le fichier en appuyant sur CTRL + X , puis y , puis ENTER pour confirmer les modifications.

Enfin, redémarrez MySQL avec cette commande :

sudo service mysql restart

Cette modification désactive deux paramètres de mode SQL, STRICT_TRANS_TABLES et ONLY_FULL_GROUP_BY, qui ont été ajoutés dans MySQL 5.7 et causent des problèmes pour certaines applications plus anciennes.

Confirmer que le mode SQL strict est désactivé

Vous pouvez confirmer que le mode SQL strict est désactivé en exécutant cette commande en tant que root :

sudo mysql -i -BN -e 'SELECT @@sql_mode' | grep -E 'ONLY_FULL_GROUP_BY|STRICT_TRANS_TABLES'

Si le mode strict est désactivé, vous ne verrez aucune sortie de cette commande.

Si la désactivation du mode strict vous cause des problèmes, vous pouvez le réactiver en supprimant ce fichier et en redémarrant à nouveau MySQL.

À quoi ressemblent les erreurs en mode SQL strict

Si votre application n'est pas compatible avec le mode SQL strict, vous verrez souvent des erreurs SQL telles que :

SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of
SELECT list is not in GROUP BY clause and contains nonaggregated column
'yourdbname.tblannouncements.date' which is not functionally dependent on
columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by