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ć?
column
), aby ponownie dopasować zapytanie. Zobacz dokument tutaj
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ć?
column
), aby ponownie dopasować zapytanie. Zobacz dokument tutaj
Odpowiedzi:
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
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ło SESSION
. SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
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
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
[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
zrestartować MySQL
Spowoduje to wyłączenie ONLY_FULL_GROUP_BY
dla WSZYSTKICH użytkowników
/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
SET sql_mode = ''
To faktycznie usuwa wszystkie aktualnie włączone tryby. Jeśli nie chcesz zadzierać z innymi ustawieniami, zrób to
SELECT @@sql_mode
najpierw, aby uzyskać listę trybów oddzielonych przecinkami, a następnie ustaw ją na tej liście bez ONLY_FULL_GROUP_BY
opcji.
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:
SET sql_mode = ''
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.
''
= '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 .
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;
sql_mode
przywracam poprzednią wartość. Co mogę teraz zrobić?
Dodanie tylko jednego trybu do trybu sql_mode bez usuwania istniejących:
SET sql_mode=(SELECT CONCAT(@@sql_mode,',<mode_to_add>'));
Usuwanie tylko określonego trybu z trybu sql_mode bez usuwania innych:
SET sql_mode=(SELECT REPLACE(@@sql_mode,'<mode_to_remove>',''));
W twoim przypadku, jeśli chcesz usunąć tylko ONLY_FULL_GROUP_BY
tryb, użyj poniższego polecenia:
SET sql_mode=(SELECT REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', ''));
Odniesienie: http://johnemb.blogspot.com/2014/09/adding-or-removing-indidual-sql-modes.html
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 działało dobrze dla mnie.
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.3
Na:
Zrobić:
$ 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
/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 plik
Zauważ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:
SELECT @@GLOBAL.sql_mode;
skopiuj wynik i usuń z niego to, czego nie potrzebujesz ( ONLY_FULL_GROUP_BY )
na przykład:
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 ten plik:
/etc/mysql/conf.d/disable_strict_mode.cnf
i napisz i wklej 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
zrestartuj 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
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.
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
Na moim sql (wersja 5.7.11 działająca na Mac OS X) działa to dla mnie na kliencie powłoki 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"
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 +
sql_mode := ''
że są możliwe. Dlaczego się nie zgadzasz?
Na MySQL 5.7 i Ubuntu 16.04 edytuj plik mysql.cnf.
$ sudo nano /etc/mysql/conf.d/mysql.cnf
Dodaj tryb sql 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 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:
$ sudo service mysql restart
Spróbuj uzyskać dostęp do mysql:
$ mysql -u user_name -p
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!
Oto, co zrobiłem, aby naprawić na Mysql workbench:
Zanim uzyskałem bieżącą wartość za pomocą poniższego polecenia
SELECT @@sql_mode
później usunąłem klucz ONLY_FULL_GROUP_BY z listy i wkleiłem poniższe polecenie
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'
W systemie Mac OS Mojave (10.14) Otwórz terminal
$ sudo mkdir /usr/local/mysql-5.7.24-macos10.14-x86_64/etc
$ cd /usr/local/mysql-5.7.24-macos10.14-x86_64/etc
$ sudo nano my.cnf
Wklej następujące:
[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
ShortKeys do Save & Exit nano: Ctrl+x
i y
iEnter
Uwaga: Może być konieczne zaktualizowaniemysql-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!
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:
SET SESSION sql_mode = sys.list_drop(@@SESSION.sql_mode, 'ONLY_FULL_GROUP_BY');
SET sql_mode = sys.list_drop(@@sql_mode, 'ONLY_FULL_GROUP_BY');
SET @@sql_mode = sys.list_drop(@@sql_mode, 'ONLY_FULL_GROUP_BY');
Aby usunąć tryb z tego, GLOBAL.sql_mode
który utrzymuje się dla bieżącej operacji środowiska wykonawczego , do momentu ponownego uruchomienia usługi .
SET GLOBAL sql_mode = sys.list_drop(@@GLOBAL.sql_mode, 'ONLY_FULL_GROUP_BY');
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.
SET SESSION sql_mode = TRIM(BOTH ',' FROM REPLACE(@@SESSION.sql_mode, 'ONLY_FULL_GROUP_BY', ''));
SET GLOBAL sql_mode = TRIM(BOTH ',' FROM REPLACE(@@GLOBAL.sql_mode, 'ONLY_FULL_GROUP_BY', ''));
Aby dodać tryb do sql_mode
zmiennej, powinieneś użyć CONCAT_WS(',', ...)
, aby dopilnować, aby do bieżących trybów dodano przecinek, i TRIM()
aby usunąć wszelkie pozostałe przecinki.
SET SESSION sql_mode = TRIM(BOTH ',' FROM CONCAT_WS(',', 'ONLY_FULL_GROUP_BY', @@SESSION.sql_mode));
SET GLOBAL sql_mode = TRIM(BOTH ',' FROM CONCAT_WS(',', 'ONLY_FULL_GROUP_BY', @@GLOBAL.sql_mode));
UWAGA: Zmiana
GLOBAL
zmiennej nie jest propagowana do plikuSESSION
zmiennej, dopóki nie zostanie ustanowione nowe połączenie.
GLOBAL
Zmienna będzie trwać aż usługa uruchomiona zostaje wznowiona.
SESSION
Zmienna będzie się utrzymywać na obecnym związku, aż połączenie zostanie zamknięte, a nowe połączenie zostanie nawiązane.
GLOBAL.sql_mode
Ponieważ SET sql_mode = 'ONLY_FULL_GROUP_BY';
zostało wykonane bez GLOBAL
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]
Aktualna
SESSION
wartość jest ważna tylko dla bieżącego połączenia. Ponowne połączenie z serwerem przywróci wartość z powrotem doGLOBAL
wartości.
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:
SET SESSION sql_mode = @@GLOBAL.sql_mode;
SET @@sql_mode = @@GLOBAL.sql_mode;
SET sql_mode = @@GLOBAL.sql_mode;
Zmień SESSION.sql_mode
wartość naONLY_FULL_GROUP_BY
SET sql_mode = 'ONLY_FULL_GROUP_BY';
SELECT @@sql_mode, @@GLOBAL.sql_mode;
+--------------------+----------------------------------------------+
| @@sql_mode | @@GLOBAL.sql_mode |
+--------------------+----------------------------------------------+
| ONLY_FULL_GROUP_BY | NO_AUTO_VALUE_ON_ZERO,NO_ENGINE_SUBSTITUTION |
+--------------------+----------------------------------------------+
Przywróć SESSION.sql_mode
wartość do GLOBAL.sql_mode
wartości
SET sql_mode = @@GLOBAL.sql_mode;
SELECT @@sql_mode, @@GLOBAL.sql_mode;
+----------------------------------------------+----------------------------------------------+
| @@sql_mode | @@GLOBAL.sql_mode |
+----------------------------------------------+----------------------------------------------+
| NO_AUTO_VALUE_ON_ZERO,NO_ENGINE_SUBSTITUTION | NO_AUTO_VALUE_ON_ZERO,NO_ENGINE_SUBSTITUTION |
+----------------------------------------------+----------------------------------------------+
sql_mode
Aby ustawić tryb SQL podczas uruchamiania serwera, użyj
--sql-mode="modes"
opcji w wierszu polecenia lubsql-mode="modes"
w pliku opcji, takim jak my.cnf (systemy operacyjne Unix) lub my.ini (Windows). [sic]
Sprawdź swoją wersję MySQL, aby określić obsługiwaną i domyślną tryby .
[mysqld]
sql-mode="NO_ENGINE_SUBSTITUTION" #default <= 5.7.4
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
ONLY_FULL_GROUP_BY STRICT_TRANS_TABLES NO_ZERO_IN_DATE NO_ZERO_DATE ERROR_FOR_DIVISION_BY_ZERO NO_ENGINE_SUBSTITUTION
MySQL> = 5.7.8, <= 8.0.4
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
MySQL 5.7.7
ONLY_FULL_GROUP_BY STRICT_TRANS_TABLES NO_AUTO_CREATE_USER NO_ENGINE_SUBSTITUTION
MySQL> = 5.7.5, <= 5.7.6
ONLY_FULL_GROUP_BY STRICT_TRANS_TABLES NO_ENGINE_SUBSTITUTION
MySQL> = 5.6.6, <= 5.7.4
NO_ENGINE_SUBSTITUTION
MySQL <= 5.6.5
''
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]
[mysqld]
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
Używam doktryny i dodałem driverOptions w moim doctrine.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',''))"
),
),
),
),
));
W phpmyadmin użytkownik potrzebuje SUPER aktywowanego w uprawnieniach.
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 tekstowym
np. skopiuj to:
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
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:
# disabling ONLY_FULL_GROUP_BY
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
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ę
Pracuję z mysql i zarejestrowałem się jako użytkownik root, rozwiązanie, które działa dla mnie jest następujące:
mysql> SET SESSION tryb_sql = (WYBIERZ WYMIENĘ (@@ tryb_sql, „TYLKO PEŁNY_GROUP_BY”, „”));
Jest to trwał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 - wszystko powinno być już ustawione.
Możesz go wyłączyć za pomocą pliku konfiguracyjnego my.cnf
:
$ mysql --verbose --help | grep my.cnf
Tak więc w systemie macOS 10.12 jest to 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"
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.
SET sql_mode = ''
?