mysql - pipes_as_concat - Deshabilitar ONLY_FULL_GROUP_BY
set sql_mode pipes_as_concat (19)
Actualizar:
Para mantener la configuración actual de mysql y deshabilitar ONLY_FULL_GROUP_BY
, sugiero visitar su phpmyadmin o cualquier cliente que esté usando y escriba:
SELECT REPLACE(@@sql_mode,''ONLY_FULL_GROUP_BY'','''') copy_me
siguiente copia de resultado a su archivo my.ini
.
mint : 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
resultado de copy_me
puede contener un texto largo que se puede recortar de forma predeterminada. Asegúrate de copiar todo el texto!
respuesta antigua:
Si desea deshabilitar el error de forma permanente "La expresión #N de la lista SELECT no está en la cláusula GROUP BY y contiene la columna ''db.table.COL'' no agregada que no depende funcionalmente de las columnas en la cláusula GROUP BY; esto es incompatible con sql_mode = only_full_group_by "Haz esos pasos:
-
sudo nano /etc/mysql/my.cnf
Agrega esto al final del archivo
[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"
sudo service mysql restart
para reiniciar MySQL
Esto deshabilitará ONLY_FULL_GROUP_BY
para TODOS los usuarios
Accidentalmente habilité el modo ONLY_FULL_GROUP_BY de esta manera:
SET sql_mode = ''ONLY_FULL_GROUP_BY'';
¿Cómo lo inhabilito?
Aquí está mi solución cambiando la configuración de Mysql a través del panel de control phpmyadmin:
Para corregir "esto es incompatible con sql_mode = only_full_group_by": abra phpmyadmin y goto Home Page y seleccione el submenú ''Variables''. Desplácese hacia abajo para encontrar el modo sql. Edita el modo sql y elimina ''ONLY_FULL_GROUP_BY'' Guárdalo.
En MySQL 5.7 y Ubuntu 16.04, edite el archivo mysql.cnf.
$ sudo nano /etc/mysql/conf.d/mysql.cnf
Incluya el sql_mode como el siguiente y guarde el archivo.
[mysql]
sql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Observe que, en mi caso, eliminé el modo STRICT_TRANS_TABLES y el ONLY_FULL_GROUP_BY.
Haciendo esto, se guardará la configuración del modo permanentemente. Diferentemente, si solo actualiza @@ sql_mode a través de MySQL, ya que se reiniciará al reiniciar la máquina / servicio.
Después de eso, para que la configuración modificada tome acción, reinicie el servicio mysql:
$ sudo service mysql restart
Intenta acceder al mysql:
$ mysql -u user_name -p
Si puede iniciar sesión y acceder a la consola MySQL, está bien. ¡Genial!
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 volver, editar el archivo mysql.cnf nuevamente y cambiar el [mysql]
a [mysqld]
. Reinicie el servicio MySQL y realice una última prueba intentando iniciar sesión en la consola MySQL. ¡Aquí está!
En mi sql (versión 5.7.11 que se ejecuta en Mac OS X) esto me funciona en mysql shell client:
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"
Según la documentación de MySQL 5.6, sql_mode es por defecto es
cadena en blanco en MySQL 5.6.5 y viceversa NO_ENGINE_SUBSTITUTION, STRICT_TRANS_TABLES en 5.6.6 +
En:
- Ubuntu 14.04
- mysql Ver 14.14 Distrib 5.7.16, para Linux (x86_64) usando el envoltorio EditLine
Hacer:
$ sudo nano /etc/mysql/conf.d/mysql.cnf
Copiar y pegar:
[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
Al final del archivo.
$ sudo service mysql restart
Esta es una solución permanente para MySql 5.7+ en Ubuntu 14+:
$ sudo bash -c "echo -e /"/nsql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION/" >> /etc/mysql/mysql.conf.d/mysqld.cnf"
$ sudo service mysql restart
# Check if login attempt throws any errors
$ mysql -u[user] -p # replace [user] with your own user name
Si puede iniciar sesión sin errores, debe estar todo configurado ahora.
Estoy usando doctrine y he agregado las opciones de driver en mi doctrine.local.php:
return array(
''doctrine'' => array(
''connection'' => array(
''orm_default'' => array(
''driverClass'' => ''Doctrine/DBAL/Driver/PDOMySql/Driver'',
''params'' => array(
''host'' => ''localhost'',
''port'' => ''3306'',
''user'' => ''myusr'',
''password'' => ''mypwd'',
''dbname'' => ''mydb'',
''driverOptions'' => array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET sql_mode=(SELECT REPLACE(@@sql_mode,''ONLY_FULL_GROUP_BY'',''''))"
),
),
),
),
));
En phpmyadmin el usuario necesita SUPER activado en los privilegios.
Gracias a @cwhisperer. Tuve el mismo problema con Doctrine en una aplicación de Symfony. Acabo de agregar la opción a mi config.yml:
doctrine:
dbal:
driver: pdo_mysql
options:
# PDO::MYSQL_ATTR_INIT_COMMAND
1002: "SET sql_mode=(SELECT REPLACE(@@sql_mode,''ONLY_FULL_GROUP_BY'',''''))"
Esto funcionó bien para mi.
La documentación de MySQL también especifica los siguientes métodos:
- Establezca
sql-mode="<modes>"
en un archivo de opción como my.cnf (sistemas operativos Unix) o my.ini (Windows). - Para configurar el modo SQL al inicio del servidor a través de la línea de comando, use la
--sql-mode="<modes>"
.
* Donde <modes>
es una lista de diferentes modos separados por comas.
Para borrar el modo SQL explícitamente, --sql-mode=""
en una cadena vacía usando --sql-mode=""
en la línea de comandos, o sql-mode=""
en un archivo de opciones.
/etc/my.cnf
opción sql-mode=""
a /etc/my.cnf
y funcionó.
Esta solución de SO analiza las formas de averiguar qué archivo my.cnf está utilizando MySQL.
No olvides reiniciar MySQL después de hacer cambios.
Me he dado cuenta de que la solución @Eyo Okon Eyo funciona siempre que el servidor MySQL no se reinicie, luego se restauran las configuraciones predeterminadas. Aquí hay una solución permanente que funcionó para mí:
Para eliminar el modo SQL particular (en este caso ONLY_FULL_GROUP_BY ), busque el modo SQL actual:
SELECT @@GLOBAL.sql_mode;
copia el resultado y elimina de él lo que no necesites ( ONLY_FULL_GROUP_BY )
p.ej:
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
a
STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Crea y abre este archivo:
/etc/mysql/conf.d/disable_strict_mode.cnf
y escribe y pega en tu nuevo modo SQL:
[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
reiniciar MySQL:
sudo service mysql restart
O puede usar ANY_VALUE()
para suprimir el rechazo de valor de ONLY_FULL_GROUP_BY, puede leer más sobre esto aquí
Para quién ejecuta un VPS / Servidor con cPanel / WHM , puede hacer lo siguiente para deshabilitar de forma permanente ONLY_FULL_GROUP_BY
Necesita acceso de 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 la línea completa dentro de ese cuadro de texto
por ejemplo copia esto:
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Conéctese a su servidor a través de SFTP - SSH (raíz) y descargue el archivo
/etc/my.cnf
Abra con un editor de texto el archivo
my.cnf
en su PC local y péguelo (en la sección[mysqld]
) la línea completa que copió en el paso (2), pero elimineONLY_FULL_GROUP_BY,
por ejemplo, pegar esto:
# disabling ONLY_FULL_GROUP_BY
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Guarde el archivo
my.cnf
y cárguelo nuevamente en/etc/
Ingrese WHM y vaya a "WHM> Servicios de reinicio> SQL Server (MySQL)" y reinicie el servicio
Prueba esto:
SET sql_mode = ''''
Nota de la comunidad: Como se señaló en las respuestas a continuación, esto borra todos los modos SQL actualmente habilitados. Eso puede no ser necesariamente lo que quieres.
Puedes deshabilitarlo usando el archivo de configuración my.cnf
:
$ mysql --verbose --help | grep my.cnf
Entonces, en macOS 10.12, está en usr/local/etc/my.cnf
. Puedes editar sql_mode
aquí:
# Default Homebrew MySQL server config
[mysqld]
# Only allow connections from localhost
bind-address = 127.0.0.1
sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
Si está utilizando MySQL 8.0.11, debe eliminar ''NO_AUTO_CREATE_USER'' de sql-mode.
Agregue la siguiente línea en el archivo /etc/mysql/my.cnf
y [mysqld] header
[mysqld]
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
Tener cuidado al usar
SET sql_mode = ''''
Esto realmente borra todos los modos actualmente habilitados. Si no quiere meterse con otras configuraciones, querrá hacer una
SELECT @@sql_mode
primero, para habilitar una lista separada por comas de los modos, luego AJUSTE a esta lista sin la opción ONLY_FULL_GROUP_BY
.
Añadiendo solo un modo a sql_mode sin eliminar los existentes:
SET sql_mode=(SELECT CONCAT(@@sql_mode,'',<mode_to_add>''));
Eliminando solo un modo específico de sql_mode sin eliminar otros:
SET sql_mode=(SELECT REPLACE(@@sql_mode,''<mode_to_remove>'',''''));
En su caso, si desea eliminar solo el modo ONLY_FULL_GROUP_BY
, use el siguiente comando:
SET sql_mode=(SELECT REPLACE(@@sql_mode, ''ONLY_FULL_GROUP_BY'', ''''));
Referencia: http://johnemb.blogspot.com/2014/09/adding-or-removing-individual-sql-modes.html
Solución 1: eliminar ONLY_FULL_GROUP_BY de la consola mysql
mysql > SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,''ONLY_FULL_GROUP_BY'',''''));
puedes leer mas here
Solución 2: eliminar ONLY_FULL_GROUP_BY de phpmyadmin
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'';
mysql> set session sql_mode=''STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'';
mysql> exit;