Wyłącz Tylko pełną grupę przez

Przypadkowo włączyłem tryb ONLY_FULL_GROUP_BY w następujący sposób:

SET sql_mode = 'ONLY_FULL_GROUP_BY';

Jak to wyłączyć?

Author: fedorqui, 2014-05-29

18 answers

Rozwiązanie 1: Usuń ONLY_FULL_GROUP_BY z konsoli mysql

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

Możesz przeczytać więcej tutaj

Rozwiązanie 2: Usuń ONLY_FULL_GROUP_BY z phpmyadmin

  • Otwórz phpmyadmin i wybierz localhost
  • kliknij zmienne menu i przewiń w dół dla trybu sql
  • kliknij przycisk Edytuj, aby zmienić wartości i usuń ONLY_FULL_GROUP_BY i kliknij Zapisz. Tutaj wpisz opis obrazka
 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/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-01 08:35:08

Update:

Tutaj wpisz opis obrazka

Aby zachować bieżące ustawienia mysql i wyłączyć ONLY_FULL_GROUP_BY proponuję odwiedzić phpmyadmin lub jakiegokolwiek klienta, którego używasz i wpisać:

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

Następnie skopiuj wynik do pliku my.ini.

Mięta: sudo nano /etc/mysql/my.cnf

Ubuntu 16 i więcej: sudo nano /etc/mysql/my.cnf

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

Uwaga! copy_me wynik może zawierać długi tekst, który może być domyślnie przycięty. Upewnij się, że skopiujesz cały tekst!

Stara odpowiedź:

Jeśli chcesz trwale wyłączyć błąd "wyrażenie #N listy SELECT nie jest w klauzuli GROUP BY i zawiera nieagregowaną kolumnę 'db.stolik.COL', który nie jest funkcjonalnie zależny od kolumn w klauzuli GROUP BY; jest to niezgodne z sql_mode=only_full_group_by " wykonaj te kroki:

  1. sudo nano /etc/mysql/my.cnf
  2. Dodaj to na koniec plik

    [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 aby ponownie uruchomić MySQL

To wyłączy ONLY_FULL_GROUP_BY dla WSZYSTKICH użytkowników

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-26 07:46:49

Bądź ostrożny używając

SET sql_mode = '' 

To faktycznie czyści wszystkie aktualnie włączone tryby. Jeśli nie chcesz mieszać z innymi ustawieniami, będziesz chciał zrobić

SELECT @@sql_mode 

Najpierw, aby uzyskać rozdzieloną przecinkami listę włączonych trybów, a następnie ustawić ją na tę listę bez opcji 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/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-07 13:50:46

Spróbuj:

SET sql_mode = ''

Uwaga społeczności: jak wskazano w odpowiedziach poniżej, to faktycznie usuwa Wszystkie aktualnie włączone tryby SQL. Niekoniecznie tego chcesz.

 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/doraprojects.net/template/agent.layouts/content.php on line 54
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/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-07 00:36:34

Dodawanie tylko jednego trybu do sql_mode bez usuwania istniejących:

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

Usuwanie tylko określonego trybu z sql_mode bez usuwania innych:

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

w Twoim przypadku, jeśli chcesz usunąć tylko tryb ONLY_FULL_GROUP_BY, użyj poniższego polecenia:

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

Numer referencyjny: 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/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-29 09:45:14

Dzięki @ cwhisperer. Miałem ten sam problem z Doctrine w aplikacji Symfony. Właśnie dodałem opcję do mojego 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',''))"
To mi się udało.
 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/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-07 14:16:36

Dokumentacja MySQL określa również następujące metody:

  • Ustaw sql-mode="<modes>" w pliku opcji, takim jak my.cnf (Unix operating systems) lub my.ini (Windows).
  • aby ustawić tryb SQL przy starcie serwera za pomocą wiersza poleceń, użyj opcji --sql-mode="<modes>".

* gdzie <modes> jest listą różnych trybów oddzielonych przecinkami.

Aby jawnie wyczyścić tryb SQL, ustaw go na pusty łańcuch za pomocą --sql-mode="" w wierszu poleceń lub sql-mode="" w opcji plik.

Dodałem opcję sql-mode="" do /etc/my.cnf i zadziałało.

To rozwiązanie SO omawia sposoby, aby dowiedzieć się, które Moje.plik cnf jest używany przez MySQL.

Nie zapomnij ponownie uruchomić MySQL po wprowadzeniu zmian.

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:33:24

On:

  • Ubuntu 14.04
  • mysql ver 14.14 Distrib 5.7.16, for Linux (x86_64) using EditLine wrapper

Do:

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

Kopiuj i wklej:

[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

Na dole pliku

$ 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/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-03 13:53:15

Jeśli używasz WAMP. Kliknij lewym przyciskiem myszy na ikonę WAMP następnie goto MySQL -> MySQL settings - > SQL-mode następnie wybierz sql-mode - > user mode

Sprawdź to zdjęcie

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-25 02:15:46

Zauważyłem, że @Eyo Okon eyo solution działa tak długo, jak serwer MySQL nie jest restartowany, a następnie przywracane są domyślne ustawienia. Oto trwałe rozwiązanie, które zadziałało dla mnie:

Aby usunąć określony tryb SQL (w tym przypadku ONLY_FULL_GROUP_BY), znajdź bieżący tryb SQL:

SELECT @@GLOBAL.sql_mode;

Skopiuj wynik i usuń z niego to, czego nie potrzebujesz (ONLY_FULL_GROUP_BY)

Np.:

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

Do

STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

Utwórz i otwórz to plik:

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

I wpisz do niego swój nowy tryb 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

Restart MySQL:

sudo service mysql restart

Lub możesz użyć ANY_VALUE() aby stłumić odrzucenie wartości ONLY_FULL_GROUP_BY, możesz przeczytać więcej na ten temat tutaj

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-29 14:54:29

Na moim sql (Wersja 5.7.11 działa na Mac OS X) to działa dla mnie na 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"

Zgodnie z dokumentacją MySQL 5.6 domyślnie sql_mode to

Pusty ciąg w MySQL 5.6.5 i z powrotem NO_ENGINE_SUBSTITUTION, STRICT_TRANS_TABLES in 5.6.6 +

Mysql 5.6 reference

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-12 16:32:21

W MySQL 5.7 i Ubuntu 16.04 Edytuj plik mysql.cnf.

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

Dołącz kod sql_mode jak poniżej i zapisz plik.

[mysql]
sql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

Zauważ, że w moim przypadku usunąłem tryb STRICT_TRANS_TABLES i ONLY_FULL_GROUP_BY.

W ten sposób konfiguracja trybu zostanie zapisana na stałe. Inaczej, jeśli po prostu zaktualizujesz @ @ sql_mode przez MySQL, ponieważ zresetuje się przy restarcie Maszyny/usługi.

Po tym, do zmodyfikowanej konfiguracji wziąć w akcja, restart usługi mysql:

$ sudo service mysql restart

Spróbuj uzyskać dostęp do mysql:

$ mysql -u user_name -p

Jeśli jesteś w stanie zalogować się i uzyskać dostęp do konsoli MySQL, to jest ok. Świetnie!

Ale, jeśli tak jak ja, napotkasz błąd "nieznana zmienna sql_mode" , który wskazuje, że sql_mode jest opcją dla mysqld, będziesz musiał wrócić, edytować plik mysql.cnf ponownie i zmienić [mysql] na [mysqld]. Uruchom ponownie usługę MySQL i wykonaj ostatni test próbując się zalogować Konsola MySQL. Tutaj jest!

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-13 11:23:35

Używam doktryny i dodałem driverOptions w mojej doktrynie.lokalne.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',''))"
                ),
            ),
        ),
    ),
));

W phpmyadmin użytkownik potrzebuje SUPER aktywacji w uprawnieniach.

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-12 13:51:16

Jeśli używasz MySQL 8.0.11 so, musisz usunąć 'NO_AUTO_CREATE_USER' z trybu sql.

Dodaj następujący wiersz w pliku /etc/mysql/my.cnf i nagłówku [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/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-03 12:01:03

Jest to stałe rozwiązanie dla MySql 5.7 + na 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

Jeśli jesteś w stanie zalogować się bez błędów-powinieneś być już ustawiony.

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-02 18:48:38

Możesz go wyłączyć używając pliku konfiguracyjnego my.cnf:

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

Więc w macOS 10.12 jest na usr/local/etc/my.cnf. Możesz edytować sql_mode tutaj:

# 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/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-29 07:10:33

Oto moje rozwiązanie zmieniające konfigurację Mysql poprzez pulpit nawigacyjny phpmyadmin:

Aby naprawić " to jest niezgodne z sql_mode=only_full_group_by": Otwórz stronę główną phpmyadmin i goto i wybierz podmenu "zmienne". Przewiń w dół, aby znaleźć tryb sql. Edytuj tryb sql i usuń 'ONLY_FULL_GROUP_BY' zapisz go.

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-03 11:02:22