Disable ONLY_FULL_GROUP_BY

后端 未结 27 1349
既然无缘
既然无缘 2020-11-22 00:22

I accidentally enabled ONLY_FULL_GROUP_BY mode like this:

SET sql_mode = \'ONLY_FULL_GROUP_BY\';

How do I disable it?

相关标签:
27条回答
  • 2020-11-22 00:52

    Adding only one mode to sql_mode without removing existing ones:

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

    Removing only a specific mode from sql_mode without removing others:

    SET sql_mode=(SELECT REPLACE(@@sql_mode,'<mode_to_remove>',''));
    

    In your case, if you want to remove only ONLY_FULL_GROUP_BY mode, then use below command:

    SET sql_mode=(SELECT REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', ''));
    

    Reference: http://johnemb.blogspot.com/2014/09/adding-or-removing-individual-sql-modes.html

    0 讨论(0)
  • 2020-11-22 00:52

    I have noticed that @Eyo Okon Eyo solution works as long as MySQL server is not restarted, then defaults settings are restored. Here is a permanent solution that worked for me:

    To remove particular SQL mode (in this case ONLY_FULL_GROUP_BY), find the current SQL mode:

    SELECT @@GLOBAL.sql_mode;
    

    copy the result and remove from it what you don't need (ONLY_FULL_GROUP_BY)

    e.g.:

    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
    

    to

    STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    

    create and open this file:

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

    and write and past into it your new SQL mode:

    [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
    

    restart MySQL:

    sudo service mysql restart
    

    Or you can use ANY_VALUE() to suppress ONLY_FULL_GROUP_BY value rejection, you can read more about it here

    0 讨论(0)
  • 2020-11-22 00:53

    One important thing to note, if you have ANSI on sql_mode:

    Equivalent to REAL_AS_FLOAT, PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, and (as of MySQL 5.7.5) ONLY_FULL_GROUP_BY.

    See https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_ansi

    0 讨论(0)
  • 2020-11-22 00:54

    Here is my solution changing the Mysql configuration through the phpmyadmin dashboard:

    In order to fix "this is incompatible with sql_mode=only_full_group_by": Open phpmyadmin and goto Home Page and select 'Variables' submenu. Scroll down to find sql mode. Edit sql mode and remove 'ONLY_FULL_GROUP_BY' Save it.

    0 讨论(0)
  • 2020-11-22 00:55

    Update:

    To keep your current mysql settings and disable ONLY_FULL_GROUP_BY I suggest to visit your phpmyadmin or whatever client you are using and type:

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

    next copy result to your my.ini file.

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

    ubuntu 16 and up: sudo nano /etc/mysql/my.cnf

    ubuntu 14-16: /etc/mysql/mysql.conf.d/mysqld.cnf

    Caution! copy_me result can contain a long text which might be trimmed by default. Make sure you copy whole text!


    old answer:

    If you want to disable permanently error "Expression #N of SELECT list is not in GROUP BY clause and contains nonaggregated column 'db.table.COL' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by" do those steps:

    1. sudo nano /etc/mysql/my.cnf
    2. Add this to the end of the 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 to restart MySQL

    This will disable ONLY_FULL_GROUP_BY for ALL users

    0 讨论(0)
  • 2020-11-22 00:56

    If you are using MySQL 8.0.11 so, you need to remove the ’NO_AUTO_CREATE_USER‘ from sql-mode.

    Add following line in file /etc/mysql/my.cnf and [mysqld] header

    [mysqld]
    
    sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
    
    0 讨论(0)
提交回复
热议问题