J'ai activé accidentellement le mode ONLY_FULL_GROUP_BY comme ceci:
SET sql_mode = 'ONLY_FULL_GROUP_BY';
Comment le désactiver?
mysql
mysql-workbench
ZviBar
la source
la source
SET sql_mode = ''
?column
) pour adapter votre requête. Voir le doc iciRéponses:
Solution 1: supprimer ONLY_FULL_GROUP_BY de la console mysql
vous pouvez en savoir plus ici
Solution 2: supprimer ONLY_FULL_GROUP_BY de phpmyadmin
la source
REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','')
, MySQL supprime de toute façon les virgules indésirables de l'enregistrement. La réponse d'OP est correcte.GLOBAL
n'a pas fonctionné pour moi, maisSESSION
a fonctionné.SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
Mise à jour:
Pour conserver vos paramètres mysql actuels et les désactiver,
ONLY_FULL_GROUP_BY
je vous suggère de visiter votre phpmyadmin ou tout autre client que vous utilisez et tapez:SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','') copy_me
résultat de la copie suivante dans votre
my.ini
fichier.menthe :
sudo nano /etc/mysql/my.cnf
Ubuntu 16 et plus :
sudo nano /etc/mysql/my.cnf
Ubuntu 14-16 :
/etc/mysql/mysql.conf.d/mysqld.cnf
Mise en garde!
copy_me
Le résultat peut contenir un long texte qui pourrait être coupé par défaut. Assurez-vous de copier le texte entier!ancienne réponse:
Si vous souhaitez désactiver définitivement l' erreur " Expression #N de la liste SELECT n'est pas dans la clause GROUP BY et contient la colonne non agrégée 'db.table.COL' qui ne dépend pas fonctionnellement des colonnes de la clause GROUP BY; cela est incompatible avec sql_mode = only_full_group_by "procédez comme suit:
sudo nano /etc/mysql/my.cnf
Ajoutez ceci à la fin du fichier
sudo service mysql restart
redémarrer MySQLCela désactivera
ONLY_FULL_GROUP_BY
pour TOUS les utilisateursla source
/etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
peut ne pas être dans ce fichier, il peut être dans un répertoire include. Utilisez d'abord cette commande:grep -R "\[mysqld\]" *
pour voir ce qui s'y trouve - et d'ailleurs essayezgrep -R "\bsql_mode\b" *
Soyez prudent en utilisant
Cela efface en fait tous les modes actuellement activés. Si vous ne voulez pas jouer avec d'autres paramètres, vous voudrez faire un
tout d'abord, pour obtenir une liste séparée par des virgules des modes activés, puis définissez-la sur cette liste sans l'
ONLY_FULL_GROUP_BY
option.la source
then SET it to this list without the ONLY_FULL_GROUP_BY option.
:?SET 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=<comma-separated-list>
puis arrêtez et démarrez votre serveur. Suivez les documents de votre système d'exploitation pour l'emplacement et la meilleure façon de modifier my.cnf.Essayez ceci:
Remarque de la communauté: Comme indiqué dans les réponses ci-dessous, cela efface en fait tous les modes SQL actuellement activés. Ce n'est pas nécessairement ce que vous voulez.
la source
''
='full group by is disabled'
? MySQL fait des choses assez stupides mais celle-là est là-haut.0 rows affected
et ma requête ne fonctionne toujours pas:Error Code: 1055. Expression #6 of SELECT list is not in GROUP BY clause and contains nonaggregated column ...
global
dans la commande .la source
sql_mode
retour à la valeur précédente. Que puis-je faire maintenant?Ajout d'un seul mode à sql_mode sans supprimer les modes existants:
Supprimer uniquement un mode spécifique de sql_mode sans en supprimer d'autres:
Dans votre cas, si vous souhaitez supprimer uniquement le
ONLY_FULL_GROUP_BY
mode, utilisez la commande ci-dessous:Référence: http://johnemb.blogspot.com/2014/09/adding-or-removing-individual-sql-modes.html
la source
Merci à @cwhisperer. J'ai eu le même problème avec Doctrine dans une application Symfony. Je viens d'ajouter l'option à mon config.yml:
CA marchait bien pour moi.
la source
SET NAMES
utilisant cette méthode, dans la plupart des cas, il n'est pas nécessaire que symfony le définisse via doctrine.dbal.charset cofnig: symfony.com/doc/current/reference/configuration/doctrine.html , et le fait correctement via PDO dns, SET NAMES est une manière obsolète de le faire, qui ne devrait pas être utilisée pour la version PHP supérieure à 5.3Sur:
Faire:
Copier et coller:
Au bas du fichier
la source
/etc/mysql/mysql.cnf
pointe vers 2 dossiers de configuration!includedir /etc/mysql/conf.d/
+!includedir /etc/mysql/mysql.conf.d/
. Il en va de même/etc/mysql/my.cnf
. Par conséquent, je suppose que les fichiers de configuration ne sont pas remplacés lors de la mise à jour. Vous pouvez en savoir plus icihttp://dev.mysql.com/doc/mysql/en/server-system-variables.html
sql_mode = "STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
peut - être qu'il est important de créer un nouveau fichier à la/etc/mysql/mysql.conf.d/mysqld_mode.cnf
placeJ'ai remarqué que la solution @Eyo Okon Eyo fonctionne tant que le serveur MySQL n'est pas redémarré, puis les paramètres par défaut sont restaurés. Voici une solution permanente qui a fonctionné pour moi:
Pour supprimer un mode SQL particulier (dans ce cas, ONLY_FULL_GROUP_BY ), recherchez le mode SQL actuel:
copiez le résultat et supprimez-en ce dont vous n'avez pas besoin ( ONLY_FULL_GROUP_BY )
par exemple:
à
créez et ouvrez ce fichier:
et y écrire et y coller votre nouveau mode SQL:
redémarrez MySQL:
Ou vous pouvez utiliser
ANY_VALUE()
pour supprimer le rejet de valeur ONLY_FULL_GROUP_BY, vous pouvez en savoir plus icila source
ANY_VALUE()
La documentation MySQL spécifie également les méthodes suivantes:
sql-mode="<modes>"
dans un fichier d'options tel que my.cnf (systèmes d'exploitation Unix) ou my.ini (Windows).--sql-mode="<modes>"
option.* Où se
<modes>
trouve une liste de différents modes séparés par des virgules.Pour effacer explicitement le mode SQL, définissez-le sur une chaîne vide à l'aide
--sql-mode=""
de la ligne de commande ousql-mode=""
dans un fichier d'options.J'ai ajouté l'
sql-mode=""
option à/etc/my.cnf
et cela a fonctionné.Cette solution SO explique comment trouver le fichier my.cnf utilisé par MySQL.
N'oubliez pas de redémarrer MySQL après avoir apporté des modifications.
la source
SELECT @@GLOBAL.sql_mode;
Si vous utilisez WAMP. Cliquez avec le bouton gauche de la souris sur l'icône WAMP, puis passez à MySQL -> Paramètres MySQL -> sql-mode, puis sélectionnez sql-mode-> user mode
la source
Sur mon SQL (version 5.7.11 fonctionnant sous Mac OS X), cela fonctionne pour moi sur le client shell mysql:
Selon la documentation MySQL 5.6, sql_mode est par défaut est
chaîne vide dans MySQL 5.6.5 et retour NO_ENGINE_SUBSTITUTION, STRICT_TRANS_TABLES dans 5.6.6 +
référence mysql 5.6
la source
sql_mode := ''
être possibles. Pourquoi êtes-vous en désaccord?Sur MySQL 5.7 et Ubuntu 16.04, éditez le fichier mysql.cnf.
Incluez le sql_mode comme suit et enregistrez le fichier.
Notez que, dans mon cas, j'ai supprimé le mode STRICT_TRANS_TABLES et le ONLY_FULL_GROUP_BY.
Ce faisant, il enregistrera la configuration du mode de façon permanente. Différemment si vous venez de mettre à jour le @@ sql_mode via MySQL, car il se réinitialisera au redémarrage de la machine / du service.
Après cela, pour que la configuration modifiée entre en action, redémarrez le service mysql:
Essayez d'accéder au mysql:
Si vous pouvez vous connecter et accéder à la console MySQL, c'est ok. Génial!
MAIS , si comme moi, vous faites face à l'erreur "variable inconnue sql_mode" , qui indique que sql_mode est une option pour mysqld , vous devrez revenir en arrière, éditer à nouveau le fichier mysql.cnf et changer le
[mysql]
en[mysqld]
. Redémarrez le service MySQL et faites un dernier test en essayant de vous connecter sur la console MySQL. C'est ici!la source
Voici ce que j'ai effectué pour corriger sur le plan de travail Mysql:
Avant d'obtenir la valeur actuelle avec la commande ci-dessous
plus tard, j'ai supprimé la clé ONLY_FULL_GROUP_BY de la liste et j'ai collé la commande ci-dessous
la source
Ajouter ou supprimer des modes à
sql_mode
MySQL 5.7.9 ou version ultérieure
Pour ajouter ou supprimer un mode
sql_mode
, vous pouvez utiliserlist_add
etlist_drop
fonctions .Pour supprimer un mode de l'actuel
SESSION.sql_mode
, vous pouvez utiliser l'une des options suivantes:Pour supprimer un mode du
GLOBAL.sql_mode
qui persiste pour le runtime actuel opération d' cours, jusqu'au redémarrage du service .MySQL 5.7.8 ou antérieur
Depuis le
sql_mode
valeur est une chaîne de modes CSV, vous devez vous assurer que la chaîne ne contient pas de virgules résiduelles, ce qui peut être accompli en utilisantTRIM(BOTH ',' FROM ...)
.Pour supprimer un mode de la
sql_mode
variable, vous souhaitez utiliserREPLACE()
avecTRIM()
pour vous assurer que toutes les virgules résiduelles sont supprimées.Pour ajouter un mode à la
sql_mode
variable, vous voudriez utiliserCONCAT_WS(',', ...)
, pour vous assurer qu'une virgule est ajoutée aux modes actuels etTRIM()
pour s'assurer que toutes les virgules résiduelles sont supprimées.Revenir à
GLOBAL.sql_mode
Puisque a
SET sql_mode = 'ONLY_FULL_GROUP_BY';
été exécuté sans leGLOBAL
modificateur, le changement n'a affecté que laSESSION
valeur d'état actuelle , qui se rapporte également à@@sql_mode
. Pour le supprimer et revenir à la valeur par défaut globale au redémarrage du serveur , vous souhaitez utiliser la valeur de@@GLOBAL.sql_mode
. [sic]Pour rétablir la valeur d'état de session actuelle à la valeur globale actuelle, vous pouvez utiliser l'une des options suivantes:
Changer la
SESSION.sql_mode
valeur enONLY_FULL_GROUP_BY
Rétablir la
SESSION.sql_mode
valeur à laGLOBAL.sql_mode
valeurRedémarrage du serveur persistant
sql_mode
Veuillez consulter votre version de MySQL pour déterminer les modes pris en charge et par défaut .
sql_mode
Valeurs par défautÉtant donné que les valeurs par version de la documentation MySQL ont été supprimées, je les ai ajoutées ici pour référence.
MySQL> = 8.0.11 8.0.5 - 8.0.10 ignoré
MySQL> = 5.7.8, <= 8.0.4
MySQL 5.7.7
MySQL> = 5.7.5, <= 5.7.6
MySQL> = 5.6.6, <= 5.7.4
MySQL <= 5.6.5
la source
Pour Mac OS Mojave (10.14) Terminal ouvert
Collez ce qui suit:
Raccourcis pour enregistrer et quitter nano:
Ctrl+x
ety
etEnter
Remarque: vous devrez peut-être mettre à jour
mysql-5.7.24-macos10.14-x86_64
ces commandes, vérifiez simplement le nom de dossier correct que vous avez obtenu dans/usr/local/
J'espère que cela aidera quelqu'un!
la source
Si vous utilisez MySQL 8.0.11, vous devez supprimer le 'NO_AUTO_CREATE_USER' du mode sql.
Ajouter la ligne suivante dans le fichier
/etc/mysql/my.cnf
et l'en-tête [mysqld]la source
J'utilise doctrine et j'ai ajouté les options driverOptions dans mon doctrine.local.php:
Dans phpmyadmin, l'utilisateur a besoin de SUPER activé dans les privilèges.
la source
À qui exécute un VPS / serveur avec cPanel / WHM , vous pouvez effectuer les opérations suivantes pour désactiver définitivement ONLY_FULL_GROUP_BY
Vous avez besoin d'un accès root (soit sur un VPS soit sur un serveur dédié)
Entrez WHM en tant que root et exécutez phpMyAdmin
Cliquez sur Variables, recherchez
sql_mode
, cliquez sur «Modifier» et copiez la ligne entière à l' intérieur de cette zone de textepar exemple, copiez ceci:
Connectez-vous à votre serveur via SFTP - SSH (root) et téléchargez le fichier
/etc/my.cnf
Ouvrez avec un
my.cnf
fichier éditeur de texte sur votre PC local et collez-y (sous la[mysqld]
section) toute la ligne que vous avez copiée à l'étape (2) mais supprimezONLY_FULL_GROUP_BY,
par exemple collez ceci:
Enregistrez le
my.cnf
fichier et téléchargez-le dans/etc/
Entrez WHM et allez dans "WHM> Redémarrer les services> SQL Server (MySQL)" et redémarrez le service
la source
Im travaillant avec mysql et enregistré avec l'utilisateur root, la solution qui fonctionne pour moi est la suivante:
la source
Il s'agit d'une solution permanente pour MySql 5.7+ sur Ubuntu 14+:
Si vous êtes en mesure de vous connecter sans erreur - vous devriez être prêt maintenant.
la source
Vous pouvez le désactiver en utilisant le fichier de configuration
my.cnf
:Donc, dans macOS 10.12, c'est à
usr/local/etc/my.cnf
. Vous pouvez éditersql_mode
ici:la source
Voici ma solution modifiant la configuration de Mysql via le tableau de bord phpmyadmin:
Pour corriger "ceci est incompatible avec sql_mode = only_full_group_by": Ouvrez phpmyadmin et allez à la page d'accueil et sélectionnez le sous-menu "Variables". Faites défiler vers le bas pour trouver le mode sql. Modifiez le mode SQL et supprimez «ONLY_FULL_GROUP_BY». Enregistrez-le.
la source
avec MySQL version 5.7.28 vérifier en utilisant
SELECT @@sql_mode;
et mettre à jour avecla source