Deshabilitar SOLO EL GRUPO COMPLETO POR


Accidentalmente habilité el modo ONLY_FULL_GROUP_BY de esta manera:

SET sql_mode = 'ONLY_FULL_GROUP_BY';

¿Cómo lo deshabilito?

Author: fedorqui, 2014-05-29

18 answers

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 más aquí

Solución 2: Eliminar ONLY_FULL_GROUP_BY desde phpmyadmin

  • Abra phpmyadmin y seleccione localhost
  • Haga clic en Variables de menú y desplácese hacia abajo para el modo sql
  • Haga clic en el botón editar para cambiar los valores & eliminar ONLY_FULL_GROUP_BY & haga clic en guardar. introduzca la descripción de la imagen aquí
 717
Author: Eyo Okon Eyo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-01 08:35:08

Actualización:

introduzca la descripción de la imagen aquí

Para mantener su configuración actual de mysql y desactivar ONLY_FULL_GROUP_BY Le sugiero que visite su phpmyadmin o cualquier cliente que esté utilizando y escriba:

SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','') copy_me

Copie el siguiente resultado en su archivo my.ini.

Menta: sudo nano /etc/mysql/my.cnf

Ubuntu 16 y arriba: 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 ser recortado por defecto. Asegúrese de copiar todo el texto!


Respuesta antigua:

Si desea deshabilitar permanentemente error "La expresión #N de SELECT list no está en la cláusula GROUP BY y contiene la columna 'db no agregada.tabla.COL 'que no depende funcionalmente de las columnas en la cláusula GROUP BY; esto es incompatible con sql_mode = only_full_group_by " haga estos pasos:

  1. sudo nano /etc/mysql/my.cnf
  2. Añadir esto al final de la file

    [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 desactivará ONLY_FULL_GROUP_BY para TODOS LOS usuarios

 295
Author: breq,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-26 07:46:49

Tenga cuidado usando

SET sql_mode = '' 

Esto borra todos los modos actualmente habilitados. Si no quieres meterte con otros ajustes, querrás hacer un

SELECT @@sql_mode 

Primero, para obtener una lista separada por comas de los modos habilitados, luego establézcala en esta lista sin la opción ONLY_FULL_GROUP_BY.

 172
Author: Taran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-07 13:50:46

Pruebe esto:

SET sql_mode = ''

Nota de la comunidad: Como se señala en las respuestas a continuación, esto en realidad borra todos los modos SQL actualmente habilitados. Eso puede no ser necesariamente lo que quieres.

 93
Author: Tripp Kinetics,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-29 19:41:52
    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;
 86
Author: WeiYuan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-07 00:36:34

Agregar solo un modo a sql_mode sin eliminar los existentes:

SET sql_mode=(SELECT CONCAT(@@sql_mode,',<mode_to_add>'));

Eliminar 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 comando siguiente:

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

 44
Author: Janaka R Rajapaksha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-29 09:45:14

Gracias a @cwhisperer. Tuve el mismo problema con Doctrine en una aplicación de Symfony. Acabo de añadir la opción a mi configuración.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 mí.

 37
Author: Arvid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-07 14:16:36

La documentación de MySQL también especifica los siguientes métodos:

  • Establece sql-mode="<modes>" en un archivo de opciones como my.cnf (Unix operating systems) o my.ini (Windows).
  • Para establecer el modo SQL al iniciar el servidor a través de la línea de comandos, utilice la opción --sql-mode="<modes>".

*Donde <modes> es una lista de diferentes modos separados por comas.

Para borrar explícitamente el modo SQL, establézcalo en una cadena vacía usando --sql-mode="" en la línea de comandos, o sql-mode="" en una opción file.

Agregué la opción sql-mode="" a /etc/my.cnf y funcionó.

Esta solución SO discute formas de averiguar cuál es mi.archivo cnf está siendo utilizado por MySQL.

No olvide reiniciar MySQL después de realizar cambios.

 22
Author: br3nt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:33:24

On:

  • Ubuntu 14.04
  • mysql Ver 14.14 Distrib 5.7.16, para Linux (x86_64) usando EditLine wrapper

Do:

$ 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
 22
Author: Jadeye,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-03 13:53:15

Si está utilizando WAMP. Haga clic izquierdo en el icono WAMP y luego vaya a MySQL - > MySQL settings - > sql-mode y luego seleccione sql-mode- > user mode

Checkout esta imagen

 17
Author: Shiran Gabriel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-25 02:15:46

He notado que la solución @Eyo Okon Eyo funciona siempre y cuando el servidor MySQL no se reinicie, luego se restauran los valores predeterminados. 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;

Copie el resultado y elimine de él lo que no necesita (ONLY_FULL_GROUP_BY)

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

Crear y abrir esto archivo:

/etc/mysql/conf.d/disable_strict_mode.cnf

Y escribe y pasa en él 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

Reinicie MySQL:

sudo service mysql restart

O puede usar ANY_VALUE() para suprimir el rechazo de valor ONLY_FULL_GROUP_BY, puede leer más sobre esto aquí

 15
Author: Waqleh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-29 14:54:29

En mi sql (versión 5.7.11 que se ejecuta en Mac OS X) esto funciona para mí en el cliente de shell 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"

De acuerdo con la documentación de MySQL 5.6, sql_mode es por defecto es

Cadena en blanco en MySQL 5.6.5 y atrás NO_ENGINE_SUBSTITUTION, STRICT_TRANS_TABLES en 5.6.6 +

Referencia de Mysql 5.6

 9
Author: Salvatore Napoli,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-12 16:32:21

En MySQL 5.7 y Ubuntu 16.04, edite el archivo mysql.cnf.

$ sudo nano /etc/mysql/conf.d/mysql.cnf

Incluya el modo 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, guardará la configuración del modo permanentemente. De manera diferente si solo actualiza el @@sql_mode a través de MySQL, porque se restablecerá en el reinicio de la máquina / servicio.

Después de eso, a la configuración modificada tomar en acción, reinicie el servicio mysql:

$ sudo service mysql restart

Intenta acceder a mysql:

$ mysql -u user_name -p

Si puede iniciar sesión y acceder a MySQL console, está bien. ¡Órale!

PERO, si como yo, usted se enfrenta el error "variable desconocida sql_mode", que indica que sql_mode es una opción para mysqld, tendrá que volver, editar el archivo mysql.cnf de nuevo y cambiar el [mysql] a [mysqld]. Reinicie el servicio MySQL y haga una última prueba tratando de iniciar sesión en Consola MySQL. Aquí está!

 8
Author: Alexandre Ribeiro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-13 11:23:35

Estoy usando doctrina y he agregado las opciones de conducción en mi doctrina.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.

 5
Author: cwhisperer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-12 13:51:16

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]

[mysqld]

sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
 4
Author: Hiren Bhut,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-10-03 12:01:03

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, debería estar listo ahora.

 2
Author: demisx,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-02 18:48:38

Puede desactivarlo usando el archivo de configuración my.cnf:

$ mysql --verbose --help | grep my.cnf

Así que 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"
 0
Author: Dio Phung,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-29 07:10:33

Aquí está mi solución cambiando la configuración de Mysql a través del panel de phpmyadmin:

Para arreglar "esto es incompatible con sql_mode = only_full_group_by": Abra la página principal de phpmyadmin y goto 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.

 0
Author: Marcello Perri,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-03 11:02:22