J'essaie de définir sql_mode dans mysql mais cela génère une erreur.
Commander:
set global sql_mode='NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLE','NO_AUTO_CREATE_USER','NO_ENGINE_SUBSTITUTION'
N'est-ce pas la bonne façon de définir plusieurs modes? Quels sont les avantages de définir les modes session et global? qui est préféré? J'ai différents utilisateurs qui essaient de mettre à jour la base de données avec différentes valeurs UNC et insted od de définir le mode de session sur `` NO_BACKSLASH_ESCAPES '', j'ai pensé qu'il serait logique de créer un mode gloabl pour cela. Est-ce que ça a du sens?
S'il vous plaît, faites-moi savoir.
Merci.
Réponses:
BTW, si vous définissez des globaux dans MySQL:
SET GLOBAL sql_mode = 'NO_ENGINE_SUBSTITUTION'; SET SESSION sql_mode = 'NO_ENGINE_SUBSTITUTION';
Cela ne le définira pas de manière PERMANENTE et il reviendra après chaque redémarrage.
Vous devez donc définir ceci dans votre fichier de configuration (par exemple
/etc/mysql/my.cnf
dans la section [mysqld]), afin que les modifications restent en vigueur après le redémarrage de MySQL:Fichier de configuration: /etc/mysql/my.cnf
MISE À JOUR: Les versions plus récentes de Mysql (par exemple 5.7.8 ou supérieur) peuvent nécessiter une syntaxe légèrement différente:
Assurez-vous qu'il y a un tiret entre
sql-mode
pas un trait de soulignement et que les modes sont entre guillemets.Faites toujours référence aux documents MySQL de votre version pour voir les options du mode SQL .
la source
5.7.20
et pour le cas demysql.ini
, utiliser un trait de soulignement et oublier les citations fonctionne très bien, commesql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
Je l'ai résolu.
le mode correct est:
set global sql_mode="NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLE,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
la source
Définition du mode sql de manière permanente en utilisant le fichier de configuration mysql.
Dans mon cas, je dois changer de fichier
/etc/mysql/mysql.conf.d/mysqld.cnf
tel qu'ilmysql.conf.d
est inclus dans/etc/mysql/my.cnf
. je change cela sous [mysqld]vient de supprimer le
ONLY_FULL_GROUP_BY
mode SQL car il causait un problème.J'utilise
ubuntu 16.04
,php 7
et mysql --version me donne cecimysql Ver 14.14 Distrib 5.7.13, for Linux (x86_64) using EditLine wrapper
Après ce changement, exécutez les commandes ci-dessous
sudo service mysql stop sudo service mysql start
Maintenant, vérifiez les modes sql par cette requête
SELECT @@sql_mode
et vous devriez obtenir les modes que vous venez de définir.la source
Copier dans le fichier de configuration:
/etc/mysql/my.cnf OR /bin/mysql/my.ini
MySQL
redémarrer.Ou vous pouvez aussi faire
MySQL
redémarrer.la source
sql_mode
lieu desql-mode
.Pour quelqu'un qui recherche cette erreur sur MySQL 8.
MySQL 8.0.11 supprime le 'NO_AUTO_CREATE_USER' du mode sql.
Pris d' ici
Donc, vous
sql_mode
pouvez être comme ça:Ou si vous utilisez Docker, vous pouvez ajouter la commande suivante à docker-compose.yml
mysql: image: mysql:8.0.13 command: --sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION ports: - 13306:${MYSQL_PORT}
la source
Pour un changement temporaire, utilisez la commande suivante
set global sql_mode="NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLE,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
Pour un changement permanent: allez dans le fichier de configuration /etc/my.cnf ou /etc/mysql/mysql.conf.d/mysqld.cnf et ajoutez les lignes suivantes puis redémarrez le service mysql
la source
Accédez à la base de données en tant qu'utilisateur administrateur (root peut-être).
Vérifier le SQL_mode actuel
mysql> SELECT @@sql_mode;
Pour définir un nouveau sql_mode, quittez la base de données, créez un fichier
avec votre contenu sql_mode
Redémarrez Mysql
mysql> sudo service mysql stop mysql> sudo service mysql start
Nous créons un fichier dans le dossier /etc/mysql/conf.d/ car dans le fichier de configuration principal /etc/mysql/my.cnf, la commande est écrite pour inclure tous les fichiers de paramètres du dossier / etc / mysql / conf. ré/
la source
Dans mon cas, je dois changer de fichier
/etc/mysql/mysql.conf.d/mysqld.cnf
changez ceci sous [mysqld
]Collez cette ligne sur la
mysqld
portion [ ]la source
J'ai juste eu un problème similaire où MySQL (5.6.45) n'accepterait
sql_mode
aucun fichier de configuration.La solution était d'ajouter
init_file = /etc/mysql/mysql-init.sql
au fichier de configuration, puis de l'exécuterSET GLOBAL sql_mode = '';
.la source
Consultez la documentation de sql_mode
Méthode 1:
Vérifiez la valeur par défaut de sql_mode:
SELECT @@sql_mode //check current value for sql_mode SET GLOBAL sql_mode = "NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLE,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";
Méthode 2:
Accédez à phpmyadmin pour modifier votre
sql_mode
Redémarrez le serveur après avoir exécuté les choses ci-dessus
la source
Dans mon cas, mysql et ubuntu 18.04
Je l'ai défini en permanence à l'aide de cette commande
Ajoutez la ligne après la configuration. Voir l'exemple mis en évidence dans l'image ci-dessous.
Voir la documentation et la référence des modes SQL disponibles
J'espère que cela t'aides :-)
la source
Si quelqu'un veut le définir uniquement pour la session en cours, utilisez la commande suivante
set session sql_mode="NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLE,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
la source
la source