Przypadkowo włączyłem tryb ONLY_FULL_GROUP_BY w następujący sposób:
SET sql_mode = 'ONLY_FULL_GROUP_BY';
Jak mogę to wyłączyć?
mysql
mysql-workbench
ZviBar
źródło
źródło
SET sql_mode = ''
?column
), aby ponownie dopasować zapytanie. Zobacz dokument tutajOdpowiedzi:
Rozwiązanie 1: Usuń ONLY_FULL_GROUP_BY z konsoli mysql
możesz przeczytać więcej tutaj
Rozwiązanie 2: Usuń ONLY_FULL_GROUP_BY z phpmyadmin
źródło
REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','')
, MySQL i tak usuwa niechciane przecinki z rekordu. Odpowiedź OP jest poprawna.GLOBAL
nie działało dla mnie, ale działałoSESSION
.SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
Aktualizacja:
Aby zachować bieżące ustawienia MySQL i wyłączyć
ONLY_FULL_GROUP_BY
, sugeruję odwiedzić phpmyadmin lub innego klienta, którego używasz i wpisać:SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','') copy_me
następna kopia wyniku do
my.ini
pliku.mięta :
sudo nano /etc/mysql/my.cnf
Ubuntu 16 i nowsze :
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 skopiowałeś cały tekst!stara odpowiedź:
Jeśli chcesz trwale wyłączyć błąd, „ Wyrażenie nr N listy SELECT nie znajduje się w klauzuli GROUP BY i zawiera niezagregowaną kolumnę„ db.table.COL ”, która nie jest funkcjonalnie zależna od kolumn w klauzuli GROUP BY; jest to niezgodne z trybem sql_mode = only_full_group_by „wykonaj następujące czynności:
sudo nano /etc/mysql/my.cnf
Dodaj to na końcu pliku
sudo service mysql restart
zrestartować MySQLSpowoduje to wyłączenie
ONLY_FULL_GROUP_BY
dla WSZYSTKICH użytkownikówźródło
/etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
może nie znajdować się w tym pliku, może znajdować się w katalogu dołączania. Najpierw użyj tego polecenia:grep -R "\[mysqld\]" *
aby zobaczyć, co tam jest - i spróbujgrep -R "\bsql_mode\b" *
Uważaj przy użyciu
To faktycznie usuwa wszystkie aktualnie włączone tryby. Jeśli nie chcesz zadzierać z innymi ustawieniami, zrób to
najpierw, aby uzyskać listę trybów oddzielonych przecinkami, a następnie ustaw ją na tej liście bez
ONLY_FULL_GROUP_BY
opcji.źródło
then SET it to this list without the ONLY_FULL_GROUP_BY option.
:?SET sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
sql_mode=<comma-separated-list>
następnie zatrzymaj się i uruchom serwer. Postępuj zgodnie z dokumentacją systemu operacyjnego, aby znaleźć i najlepszy sposób edycji pliku my.cnf.Wypróbuj to:
Uwaga społeczności: jak wskazano w odpowiedziach poniżej, powoduje to usunięcie wszystkich aktualnie włączonych trybów SQL. To niekoniecznie musi być to, czego chcesz.
źródło
''
='full group by is disabled'
? MySQL robi pewne głupie rzeczy, ale ten jest na górze.0 rows affected
a moje zapytanie nadal nie działa:Error Code: 1055. Expression #6 of SELECT list is not in GROUP BY clause and contains nonaggregated column ...
global
polecenia .źródło
sql_mode
przywracam poprzednią wartość. Co mogę teraz zrobić?Dodanie tylko jednego trybu do trybu sql_mode bez usuwania istniejących:
Usuwanie tylko określonego trybu z trybu sql_mode bez usuwania innych:
W twoim przypadku, jeśli chcesz usunąć tylko
ONLY_FULL_GROUP_BY
tryb, użyj poniższego polecenia:Odniesienie: http://johnemb.blogspot.com/2014/09/adding-or-removing-indidual-sql-modes.html
źródło
Dzięki @cwhisperer. Miałem ten sam problem z Doctrine w aplikacji Symfony. Właśnie dodałem opcję do mojego config.yml:
To działało dobrze dla mnie.
źródło
SET NAMES
za pomocą tej metody, w większości przypadków nie jest to konieczne symfony już to ustawia za pośrednictwem doctrine.dbal.charset cofnig: symfony.com/doc/current/reference/configuration/doctrine.html , i robi to poprawnie za pomocą PDO dns, SET NAMES to przestarzały sposób, który nie powinien być używany w wersji PHP wyższej niż 5.3Na:
Zrobić:
Kopiuj i wklej:
Na dole pliku
źródło
/etc/mysql/mysql.cnf
wskazuje na 2 foldery konfiguracji!includedir /etc/mysql/conf.d/
+!includedir /etc/mysql/mysql.conf.d/
. To samo dotyczy/etc/mysql/my.cnf
. Dlatego zakładam, że pliki konfiguracji nie są zastępowane podczas aktualizacji. Możesz przeczytać więcej tutajhttp://dev.mysql.com/doc/mysql/en/server-system-variables.html
sql_mode = "STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
może ważne jest, aby/etc/mysql/mysql.conf.d/mysqld_mode.cnf
zamiast tego utworzyć nowy plikZauważyłem, że @Eyo Okon Eyo działa tak długo, jak długo serwer MySQL nie zostanie zrestartowany, a następnie przywrócone zostaną ustawienia domyślne. Oto trwałe rozwiązanie, które działało dla mnie:
Aby usunąć konkretny tryb SQL (w tym przypadku ONLY_FULL_GROUP_BY ), znajdź bieżący tryb SQL:
skopiuj wynik i usuń z niego to, czego nie potrzebujesz ( ONLY_FULL_GROUP_BY )
na przykład:
do
utwórz i otwórz ten plik:
i napisz i wklej do niego swój nowy tryb SQL:
zrestartuj MySQL:
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źródło
ANY_VALUE()
Dokumentacja MySQL określa również następujące metody:
sql-mode="<modes>"
w pliku opcji, takim jak my.cnf (systemy operacyjne Unix) lub my.ini (Windows).--sql-mode="<modes>"
opcji.*Gdzie
<modes>
jest lista różnych trybów oddzielonych przecinkami.Aby jawnie wyczyścić tryb SQL, ustaw go na pusty ciąg znaków, używając
--sql-mode=""
w wierszu polecenia lubsql-mode=""
w pliku opcji.Dodałem
sql-mode=""
opcję/etc/my.cnf
i zadziałało.To rozwiązanie SO omawia sposoby sprawdzenia, który plik my.cnf jest używany przez MySQL.
Nie zapomnij zrestartować MySQL po dokonaniu zmian.
źródło
SELECT @@GLOBAL.sql_mode;
Jeśli używasz WAMP. Kliknij lewym przyciskiem myszy ikonę WAMP, a następnie przejdź do MySQL -> Ustawienia MySQL -> tryb sql, a następnie wybierz tryb sql-> tryb użytkownika
źródło
Na moim sql (wersja 5.7.11 działająca na Mac OS X) działa to dla mnie na kliencie powłoki mysql:
Zgodnie z dokumentacją MySQL 5.6 tryb_sql jest domyślnie ustawiony na
pusty ciąg w MySQL 5.6.5 i wstecz NO_ENGINE_SUBSTITUTION, STRICT_TRANS_TABLES w 5.6.6 +
Odniesienie do mysql 5.6
źródło
sql_mode := ''
że są możliwe. Dlaczego się nie zgadzasz?Na MySQL 5.7 i Ubuntu 16.04 edytuj plik mysql.cnf.
Dodaj tryb sql jak poniżej i zapisz plik.
Zauważ, że w moim przypadku usunąłem tryb STRICT_TRANS_TABLES i ONLY_FULL_GROUP_BY.
W ten sposób na stałe zapisze konfigurację trybu. Inaczej, jeśli zaktualizujesz tryb @@ sql_mode za pomocą MySQL, ponieważ zresetuje się po ponownym uruchomieniu komputera / usługi.
Następnie, aby zmodyfikowana konfiguracja podjęła działanie, uruchom ponownie usługę mysql:
Spróbuj uzyskać dostęp do mysql:
Jeśli możesz się zalogować i uzyskać dostęp do konsoli MySQL, jest w porządku. Świetny!
ALE , jeśli tak jak ja, napotykasz błąd „nieznana zmienna tryb_sql” , co oznacza, że tryb_sql jest opcją dla mysqld , musisz wrócić, ponownie edytować plik mysql.cnf i zmienić
[mysql]
na[mysqld]
. Uruchom ponownie usługę MySQL i wykonaj ostatni test, próbując zalogować się na konsoli MySQL. Oto jest!źródło
Oto, co zrobiłem, aby naprawić na Mysql workbench:
Zanim uzyskałem bieżącą wartość za pomocą poniższego polecenia
później usunąłem klucz ONLY_FULL_GROUP_BY z listy i wkleiłem poniższe polecenie
źródło
W systemie Mac OS Mojave (10.14) Otwórz terminal
Wklej następujące:
ShortKeys do Save & Exit nano:
Ctrl+x
iy
iEnter
Uwaga: Może być konieczne zaktualizowanie
mysql-5.7.24-macos10.14-x86_64
tych poleceń, po prostu sprawdź poprawną nazwę folderu, który masz/usr/local/
Mam nadzieję, że to komuś pomoże!
źródło
Dodaj lub usuń tryby do
sql_mode
MySQL 5.7.9 lub nowszy
Aby dodać lub usunąć tryb
sql_mode
, możesz użyćlist_add
ilist_drop
funkcji.Aby usunąć tryb z bieżącego
SESSION.sql_mode
, możesz użyć jednej z następujących czynności:Aby usunąć tryb z tego,
GLOBAL.sql_mode
który utrzymuje się dla bieżącej operacji środowiska wykonawczego , do momentu ponownego uruchomienia usługi .MySQL 5.7.8 lub wcześniejszy
Ponieważ
sql_mode
wartością jest ciąg trybów CSV, należy upewnić się, że ciąg nie zawiera pozostałych przecinków, co można osiągnąć za pomocąTRIM(BOTH ',' FROM ...)
.Aby usunąć tryb ze
sql_mode
zmiennej, należy użyćREPLACE()
wraz z,TRIM()
aby upewnić się, że wszystkie pozostałe przecinki zostały usunięte.Aby dodać tryb do
sql_mode
zmiennej, powinieneś użyćCONCAT_WS(',', ...)
, aby dopilnować, aby do bieżących trybów dodano przecinek, iTRIM()
aby usunąć wszelkie pozostałe przecinki.Przywrócić
GLOBAL.sql_mode
Ponieważ
SET sql_mode = 'ONLY_FULL_GROUP_BY';
zostało wykonane bezGLOBAL
modyfikatora, zmiana wpłynęła tylko na bieżącąSESSION
wartość stanu, która również dotyczy@@sql_mode
. Aby go usunąć i przywrócić globalną wartość domyślną przy ponownym uruchomieniu serwera , należy użyć wartości z@@GLOBAL.sql_mode
. [sic]Aby przywrócić bieżącą wartość stanu sesji do bieżącej wartości globalnej, możesz użyć jednej z następujących czynności:
Zmień
SESSION.sql_mode
wartość naONLY_FULL_GROUP_BY
Przywróć
SESSION.sql_mode
wartość doGLOBAL.sql_mode
wartościTrwa restart serwera
sql_mode
Sprawdź swoją wersję MySQL, aby określić obsługiwaną i domyślną tryby .
sql_mode
Wartości domyślnePonieważ wartości dokumentacji dla MySQL dla poszczególnych wersji zostały usunięte, dodałem je tutaj w celach informacyjnych.
MySQL> = 8.0.11 8.0.5 - 8.0.10 Pominięto
MySQL> = 5.7.8, <= 8.0.4
MySQL 5.7.7
MySQL> = 5.7.5, <= 5.7.6
MySQL> = 5.6.6, <= 5.7.4
MySQL <= 5.6.5
źródło
Jeśli używasz MySQL 8.0.11, musisz usunąć „NO_AUTO_CREATE_USER” z trybu sql.
Dodaj następujący wiersz w pliku
/etc/mysql/my.cnf
i nagłówek [mysqld]źródło
Używam doktryny i dodałem driverOptions w moim doctrine.local.php:
W phpmyadmin użytkownik potrzebuje SUPER aktywowanego w uprawnieniach.
źródło
Dla kogo działa VPS / Server z cPanel / WHM , możesz wykonać następujące czynności, aby trwale wyłączyć ONLY_FULL_GROUP_BY
Potrzebujesz dostępu do roota (na VPS lub na dedykowanym serwerze)
Wpisz WHM jako root i uruchom phpMyAdmin
Kliknij Zmienne, poszukaj
sql_mode
, kliknij „Edytuj” i skopiuj całą linię w tym polu tekstowymnp. skopiuj to:
Połącz się z serwerem za pośrednictwem SFTP - SSH (root) i pobierz plik
/etc/my.cnf
Otwórz za pomocą
my.cnf
pliku edytora tekstu na komputerze lokalnym i wklej do niego (w[mysqld]
sekcji) całą linię skopiowaną w kroku (2), ale usuńONLY_FULL_GROUP_BY,
np. wklej to:
Zapisz
my.cnf
plik i prześlij go z powrotem do/etc/
Wpisz WHM i przejdź do „WHM> Uruchom ponownie usługi> SQL Server (MySQL)” i uruchom ponownie usługę
źródło
Pracuję z mysql i zarejestrowałem się jako użytkownik root, rozwiązanie, które działa dla mnie jest następujące:
źródło
Jest to trwałe rozwiązanie dla MySql 5.7+ na Ubuntu 14+:
Jeśli jesteś w stanie zalogować się bez błędów - wszystko powinno być już ustawione.
źródło
Możesz go wyłączyć za pomocą pliku konfiguracyjnego
my.cnf
:Tak więc w systemie macOS 10.12 jest to
usr/local/etc/my.cnf
. Możesz edytowaćsql_mode
tutaj:źródło
Oto moje rozwiązanie zmieniające konfigurację Mysql poprzez pulpit nawigacyjny phpmyadmin:
Aby naprawić błąd „jest to niezgodne z trybem sql = 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.
źródło
z MySQL w wersji 5.7.28 sprawdź za pomocą
SELECT @@sql_mode;
i zaktualizuj za pomocąźródło