Accidentalmente habilité el modo ONLY_FULL_GROUP_BY así:
SET sql_mode = 'ONLY_FULL_GROUP_BY';
¿Cómo lo desactivo?
mysql
mysql-workbench
ZviBar
fuente
fuente
SET sql_mode = ''
?column
) para actualizar su consulta. Ver documento aquíRespuestas:
Solución 1: eliminar ONLY_FULL_GROUP_BY de la consola mysql
puedes leer más aquí
Solución 2: eliminar ONLY_FULL_GROUP_BY de phpmyadmin
fuente
REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','')
, MySQL de todos modos elimina las comas no deseadas del registro. La respuesta de OP es correcta.GLOBAL
no funcionó para mí, pero loSESSION
hizo.SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
Actualizar:
Para mantener su configuración actual de mysql y deshabilitar,
ONLY_FULL_GROUP_BY
le sugiero que visite su phpmyadmin o cualquier cliente que esté usando y escriba:SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','') copy_me
siguiente copia el resultado a su
my.ini
archivo.menta :
sudo nano /etc/mysql/my.cnf
ubuntu 16 y superior :
sudo nano /etc/mysql/my.cnf
ubuntu 14-16 :
/etc/mysql/mysql.conf.d/mysqld.cnf
¡Precaución!
copy_me
El resultado puede contener un texto largo que puede recortarse de forma predeterminada. ¡Asegúrate de copiar todo el texto!vieja respuesta:
Si desea deshabilitar permanentemente el error "La expresión #N de la lista SELECT no está en la cláusula GROUP BY y contiene la columna no agregada 'db.table.COL' que no depende funcionalmente de las columnas en la cláusula GROUP BY; esto es incompatible con sql_mode = only_full_group_by "hacer esos pasos:
sudo nano /etc/mysql/my.cnf
Agregue esto al final del archivo
sudo service mysql restart
reiniciar MySQLEsto se deshabilitará
ONLY_FULL_GROUP_BY
para TODOS los usuariosfuente
/etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
puede no estar en este archivo, podría estar en un directorio de inclusión. Use este comando primero:grep -R "\[mysqld\]" *
para ver lo que hay allí - y para el caso trygrep -R "\bsql_mode\b" *
Tenga cuidado al usar
Esto realmente borra todos los modos actualmente habilitados. Si no desea meterse con otras configuraciones, querrá hacer un
primero, para obtener una lista separada por comas de los modos habilitados, luego CONFIGURARLA en esta lista sin la
ONLY_FULL_GROUP_BY
opción.fuente
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>
luego, detenga e inicie su servidor. Siga los documentos de su sistema operativo para conocer la ubicación y la mejor manera de editar my.cnf.Prueba esto:
Nota de la comunidad: Como se señala en las respuestas a continuación, en realidad esto borra todos los modos SQL actualmente habilitados. Eso puede no ser necesariamente lo que quieres.
fuente
''
='full group by is disabled'
? MySQL hace algunas cosas bastante tontas, pero esa está ahí arriba.0 rows affected
y mi consulta aún no funciona:Error Code: 1055. Expression #6 of SELECT list is not in GROUP BY clause and contains nonaggregated column ...
global
en el comando .fuente
sql_mode
reversión al valor anterior. ¿Qué puedo hacer ahora?Agregar solo un modo a sql_mode sin eliminar los existentes:
Eliminar solo un modo específico de sql_mode sin eliminar otros:
En su caso, si desea eliminar solo el
ONLY_FULL_GROUP_BY
modo, utilice el siguiente comando:Referencia: http://johnemb.blogspot.com/2014/09/adding-or-removing-individual-sql-modes.html
fuente
Gracias a @cwhisperer. Tuve el mismo problema con Doctrine en una aplicación Symfony. Acabo de agregar la opción a mi config.yml:
Esto funcionó bien para mi.
fuente
SET NAMES
usando este método, en la mayoría de los casos, Symfony ya no lo necesita a través de doctrine.dbal.charset cofnig: symfony.com/doc/current/reference/configuration/doctrine.html , y lo hace correctamente a través de PDO dns, SET NAMES es una forma desactualizada de hacerlo, que no debe usarse para una versión PHP superior a 5.3En:
Hacer:
Copiar y pegar:
Al final del archivo
fuente
/etc/mysql/mysql.cnf
apunta a 2 carpetas de configuración!includedir /etc/mysql/conf.d/
+!includedir /etc/mysql/mysql.conf.d/
. Lo mismo vale para/etc/mysql/my.cnf
. Por lo tanto, supongo que los archivos de configuración no se anulan después de la actualización. Puedes leer más aquíhttp://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"
tal vez es importante crear un nuevo archivo en su/etc/mysql/mysql.conf.d/mysqld_mode.cnf
lugarHe notado que la solución @Eyo Okon Eyo funciona siempre que el servidor MySQL no se reinicie, luego se restablecen las configuraciones predeterminadas. Aquí hay una solución permanente que funcionó para mí:
Para eliminar el modo SQL en particular (en este caso, ONLY_FULL_GROUP_BY ), busque el modo SQL actual:
copie el resultado y elimine de él lo que no necesita ( ONLY_FULL_GROUP_BY )
p.ej:
a
crea y abre este archivo:
y escriba y pegue en él su nuevo modo SQL:
reiniciar MySQL:
O puede usar
ANY_VALUE()
para suprimir el rechazo de valor ONLY_FULL_GROUP_BY, puede leer más sobre esto aquífuente
ANY_VALUE()
La documentación de MySQL también especifica los siguientes métodos:
sql-mode="<modes>"
en un archivo de opciones como my.cnf (sistemas operativos Unix) o my.ini (Windows).--sql-mode="<modes>"
opción*Dónde
<modes>
hay una lista de diferentes modos separados por comas.Para borrar el modo SQL explícitamente, configúrelo en una cadena vacía usando
--sql-mode=""
en la línea de comando, osql-mode=""
en un archivo de opciones.Agregué la
sql-mode=""
opción/etc/my.cnf
y funcionó.Esta solución SO analiza formas de averiguar qué archivo my.cnf está siendo utilizado por MySQL.
No olvide reiniciar MySQL después de realizar cambios.
fuente
SELECT @@GLOBAL.sql_mode;
Si estás usando WAMP. Haga clic con el botón izquierdo en el icono WAMP, luego vaya a MySQL -> Configuración de MySQL -> sql-mode y luego seleccione sql-mode-> user mode
fuente
En mi sql (versión 5.7.11 ejecutándose en Mac OS X) esto funciona para mí en el cliente de shell mysql:
De acuerdo con la documentación de MySQL 5.6, sql_mode está predeterminado es
cadena en blanco en MySQL 5.6.5 y viceversa NO_ENGINE_SUBSTITUTION, STRICT_TRANS_TABLES en 5.6.6 +
referencia de mysql 5.6
fuente
sql_mode := ''
ser posibles. ¿Por qué no estás de acuerdo?En MySQL 5.7 y Ubuntu 16.04, edite el archivo mysql.cnf.
Incluya el sql_mode como el siguiente y guarde el archivo.
Observe que, en mi caso, eliminé el modo STRICT_TRANS_TABLES y el ONLY_FULL_GROUP_BY.
Al hacer esto, guardará la configuración del modo de forma permanente. De manera diferente si solo actualiza @@ sql_mode a través de MySQL, porque se restablecerá al reiniciar la máquina / servicio.
Después de eso, para la configuración modificada, tome medidas, reinicie el servicio mysql:
Intenta acceder al mysql:
Si puede iniciar sesión y acceder a la consola MySQL, está bien. ¡Excelente!
PERO , si como yo, te enfrentas al error "variable desconocida sql_mode" , que indica que sql_mode es una opción para mysqld , tendrás que regresar, editar el archivo mysql.cnf nuevamente y cambiarlo
[mysql]
a[mysqld]
. Reinicie el servicio MySQL y haga una última prueba intentando iniciar sesión en la consola MySQL. ¡Aquí está!fuente
Esto es lo que realicé para arreglar en Mysql workbench:
Antes de obtener el valor actual con el siguiente comando
luego eliminé la clave ONLY_FULL_GROUP_BY de la lista y pegué el siguiente comando
fuente
Agregar o quitar modos a
sql_mode
MySQL 5.7.9 o posterior
Para agregar o eliminar un modo
sql_mode
, puede usarlist_add
ylist_drop
funciones.Para eliminar un modo del actual
SESSION.sql_mode
, puede usar uno de los siguientes:Para eliminar un modo del
GLOBAL.sql_mode
que persiste para la operación de tiempo de ejecución actual , hasta que se reinicie el servicio .MySQL 5.7.8 o anterior
Dado que el
sql_mode
valor es una cadena de modos CSV, deberá asegurarse de que la cadena no contenga comas residuales, lo que se puede lograr mediante el usoTRIM(BOTH ',' FROM ...)
.Para eliminar un modo de la
sql_mode
variable, debe usarloREPLACE()
junto conTRIM()
para asegurarse de que se eliminen las comas residuales.Para agregar un modo a la
sql_mode
variable, querrá usarloCONCAT_WS(',', ...)
, para asegurarse de que se agregue una coma con los modos actuales yTRIM()
para asegurarse de que se eliminan las comas residuales.Volver a
GLOBAL.sql_mode
Como
SET sql_mode = 'ONLY_FULL_GROUP_BY';
se ejecutó sin elGLOBAL
modificador, el cambio solo afectó elSESSION
valor del estado actual , que también pertenece@@sql_mode
. Para eliminarlo y volver al valor predeterminado global de reinicio del servidor , querrá usar el valor de@@GLOBAL.sql_mode
. [sic]Para revertir el valor del estado de la sesión actual al valor global actual, puede usar uno de los siguientes:
Cambiar
SESSION.sql_mode
valor aONLY_FULL_GROUP_BY
Revertir el
SESSION.sql_mode
valor alGLOBAL.sql_mode
valorReinicio del servidor persistente
sql_mode
Consulte su versión de MySQL para determinar los modos admitidos y predeterminados .
sql_mode
Valores por defectoComo se han eliminado los valores de la documentación de MySQL por versión, los he agregado aquí para su referencia.
MySQL> = 8.0.11 8.0.5 - 8.0.10 Omitido
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
fuente
Para Mac OS Mojave (10.14) Terminal abierto
Pegar siguiente:
Teclas abreviadas para guardar y salir de nano:
Ctrl+x
yy
yEnter
Nota: es posible que deba actualizar
mysql-5.7.24-macos10.14-x86_64
estos comandos, solo verifique el nombre correcto de la carpeta que recibió/usr/local/
¡Espero que ayude a alguien!
fuente
Si está utilizando MySQL 8.0.11, debe eliminar el 'NO_AUTO_CREATE_USER' del modo sql.
Agregue la siguiente línea en el archivo
/etc/mysql/my.cnf
y el encabezado [mysqld]fuente
Estoy usando doctrina y he agregado las opciones driver en mi doctrine.local.php:
En phpmyadmin, el usuario necesita SUPER activado en los privilegios.
fuente
Para quién está ejecutando un VPS / Servidor con cPanel / WHM , puede hacer lo siguiente para deshabilitar permanentemente ONLY_FULL_GROUP_BY
Necesita acceso root (ya sea en un VPS o en un servidor dedicado)
Ingrese WHM como root y ejecute phpMyAdmin
Haga clic en Variables, busque
sql_mode
, haga clic en 'Editar' y copie toda la línea dentro de ese cuadro de textopor ejemplo, copie esto:
Conéctese a su servidor a través de SFTP - SSH (root) y descargue el archivo
/etc/my.cnf
Abra con un
my.cnf
archivo de editor de texto en su PC local y pegue en él (en la[mysqld]
sección) la línea completa que copió en el paso (2) pero elimineONLY_FULL_GROUP_BY,
pe pegar esto:
Guarde el
my.cnf
archivo y cárguelo nuevamente/etc/
Ingrese WHM y vaya a "WHM> Reiniciar servicios> SQL Server (MySQL)" y reinicie el servicio
fuente
Estoy trabajando con mysql y registrado con el usuario root, la solución que funciona para mí es la siguiente:
fuente
Esta es una solución permanente para MySql 5.7+ en Ubuntu 14+:
Si puede iniciar sesión sin errores, ya debería estar listo.
fuente
Puede deshabilitarlo usando el archivo de configuración
my.cnf
:Entonces, en macOS 10.12, está en
usr/local/etc/my.cnf
. Puedes editarsql_mode
aquí:fuente
Aquí está mi solución cambiando la configuración de Mysql a través del panel de phpmyadmin:
Para corregir "esto es incompatible con sql_mode = only_full_group_by": Abra phpmyadmin y vaya a la página de inicio y seleccione el submenú 'Variables'. Desplácese hacia abajo para encontrar el modo sql. Edite el modo sql y elimine 'ONLY_FULL_GROUP_BY' Guárdelo.
fuente
con MySQL versión 5.7.28 comprobar mediante el uso
SELECT @@sql_mode;
y actualizar confuente