sql_mode pipes_as_concat only_full_group_by no_zero_date no_engine_substitution no_auto_create_user modo modes estricto error_for_division_by_zero disable desactivar create cnf mysql mysql-workbench

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:

  1. sudo nano /etc/mysql/my.cnf
  2. 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"

  3. 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 +

mysql 5.6 referencia


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)

  1. Ingrese WHM como root y ejecute phpMyAdmin

  2. 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

  1. Conéctese a su servidor a través de SFTP - SSH (raíz) y descargue el archivo /etc/my.cnf

  2. 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 elimine ONLY_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

  1. Guarde el archivo my.cnf y cárguelo nuevamente en /etc/

  2. 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


Si está utilizando WAMP. Haga clic con el botón izquierdo en el icono de WAMP, luego vaya a MySQL -> Configuración de MySQL -> modo sql y luego seleccione modo sql -> modo usuario


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

  • Abre phpmyadmin y selecciona localhost
  • Haga clic en el menú Variables y desplácese hacia abajo para el modo sql
  • Haga clic en el botón editar para cambiar los valores y eliminar ONLY_FULL_GROUP_BY y haga clic en guardar.

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;