web-dev-qa-db-fra.com

Pourquoi aucun des sql_mode (s) n'est reconnu par MySQL?

Lorsque vous essayez de lancer MySQL à partir du terminal à l'aide de mysql -u <username> -p<password> J'obtiens l'erreur suivante:

mysql: [ERREUR] variable inconnue 'sql_mode = STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION'

Parmi les trois emplacements possibles que MySQL recherche pour le fichier .cnf (les a trouvés en exécutant Sudo /usr/sbin/mysqld --verbose --help | grep -A 1 "Default options"), seulement /etc/mysql/my.cnf existe. Il n'y a qu'un répertoire contenant !includedir /etc/mysql/conf.d/. La bride /etc/mysql/conf.d/mysql.cnf il y a les lignes suivantes:

 [mysql]
 sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

J'ai cherché des réponses, je n'en ai pas trouvé. Essayé, un par un, d'exclure un "mauvais mode" spécifique de la liste des modes, ils ne sont pas tous reconnus.

Ce n'est qu'en commentant complètement cette ligne que j'ai pu me connecter et lancer MySQL.

Quelqu'un sait-il quel pourrait être le problème?


Aspects de la plateforme et du système d'exploitation:

  • La version de MySQL que j'utilise est 5.7.17
  • Le système d'exploitation est la version Lubuntu 16.04, 4.7.3-generic, x86_64
6
Hemulin

Votre problème est très simple

Vous avez ce qui suit

[mysql]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

sql_mode n'est pas une option du client mysql. C'est pourquoi le message d'erreur est unknown variable.

Notez comment sql_mode et sql-mode n'apparaissent pas dans les options du client mysql:

$ mysql --help | grep mode
                      Automatically switch to vertical output mode if the
                      work in batch mode. Disable with --disable-pager. This
  --ssl-mode=name     SSL connection mode.
  --ssl               Deprecated. Use --ssl-mode instead.
                      Deprecated. Use --ssl-mode=VERIFY_IDENTITY instead.
                      also. Does not work in batch mode. Disable with
  --binary-mode       By default, ASCII '\0' is disallowed and '\r\n' is
                      \C and DELIMITER, in non-interactive mode (for input
                      expired password sandbox mode.
binary-mode                       FALSE

SOLUTION

sql_mode est une option pour mysqld.

Changez simplement l'en-tête de groupe en [mysqld]

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

Vous n'avez pas besoin de redémarrer mysql. Connectez-vous et lancez

mysql> SET GLOBAL sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

ESSAIE !!!

8
RolandoMySQLDBA