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ć?
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
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:
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
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:
sudo nano /etc/mysql/my.cnf
-
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"
-
sudo service mysql restart
aby ponownie uruchomić MySQL
To wyłączy ONLY_FULL_GROUP_BY
dla WSZYSTKICH użytkowników
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
.
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.
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;
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
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.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.
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
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
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
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 +
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!
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.
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
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.
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"
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.
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