J'ai mis à niveau notre serveur vers Ubuntu 16, qui inclut Mysql 5.7 et, par défaut, le mode strict est activé (bien qu'il n'y ait aucune entrée dans les fichiers de configuration).
Nous avons des problèmes pour importer des bases de données qui étaient en production sous mysql 5.6 et versions antérieures, à cause du mode strict. Par défaut, voici ce qui est activé:
STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ONLY_FULL_GROUP_BY
Comment configurer mysql 5.7 pour qu'il fonctionne exactement comme dans 5.6 ou que les bases de données de 5.6 soient compatibles avec 5.7?
Pour désactiver le mode SQL strict, SSH sur votre serveur sous le nom root
et créez ce fichier:
/etc/mysql/conf.d/disable_strict_mode.cnf
Ouvrez le fichier et entrez 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
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 à MySQL 5.7 et causent des problèmes pour certaines applications plus anciennes.
Vous pouvez confirmer que le mode SQL strict est désactivé en exécutant cette commande sous le nom 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 aucun résultat de cette commande.
Si la désactivation du mode strict vous pose problème, vous pouvez le réactiver en supprimant ce fichier et en redémarrant MySQL.
Source: Comment désactiver le mode SQL strict dans MySQL 5.7
Définissez sql_mode
dans /etc/mysql/mysql.conf.d/mysqld.cnf
sans STRICT_TRANS_TABLES
.
Ajouter sous [mysqld]
:
sql_mode = NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION