Próbuję ustawić sql_mode w mysql, ale zgłasza błąd.
Komenda:
set global sql_mode='NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLE','NO_AUTO_CREATE_USER','NO_ENGINE_SUBSTITUTION'
Czy to nie jest właściwy sposób ustawiania wielu trybów? Jakie są zalety ustawienia trybu sesji i trybu globalnego? który jest preferowany? Mam różnych użytkowników, którzy próbują zaktualizować bazę danych różnymi wartościami UNC i ustawiłem tryb sesji na 'NO_BACKSLASH_ESCAPES', pomyślałem, że sensowne byłoby ustawienie w tym celu trybu globalnego. Czy to ma sens?
Proszę daj mi znać.
Dzięki.
Odpowiedzi:
BTW, jeśli ustawisz globalne w MySQL:
SET GLOBAL sql_mode = 'NO_ENGINE_SUBSTITUTION'; SET SESSION sql_mode = 'NO_ENGINE_SUBSTITUTION';
Nie spowoduje to trwałego ustawienia i będzie przywracany po każdym ponownym uruchomieniu.
Więc powinieneś ustawić to w swoim pliku konfiguracyjnym (np
/etc/mysql/my.cnf
W sekcji [mysqld]), aby zmiany pozostały w mocy po restarcie MySQL:Plik konfiguracyjny: /etc/mysql/my.cnf
AKTUALIZACJA: Nowsze wersje MySQL (np. 5.7.8 lub nowszy) mogą wymagać nieco innej składni:
Upewnij się, że jest między nimi kreska
sql-mode
znakiem a nie podkreśleniem , a tryby są w cudzysłowie.Zawsze odwołuj się do dokumentacji MySQL dla swojej wersji, aby zobaczyć opcje trybu sql .
źródło
5.7.20
, iw przypadkumysql.ini
, używanie podkreślenia i zapominanie o cudzysłowach działa dobrze, na przykład:sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
Rozwiązałem to.
właściwy tryb to:
set global sql_mode="NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLE,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
źródło
Ustawienie trybu sql na stałe za pomocą pliku konfiguracyjnego mysql.
W moim przypadku muszę zmienić plik,
/etc/mysql/mysql.conf.d/mysqld.cnf
którymysql.conf.d
jest zawarty w/etc/mysql/my.cnf
. zmieniam to pod [mysqld]właśnie usunąłem
ONLY_FULL_GROUP_BY
tryb sql, ponieważ powodował problem.Używam
ubuntu 16.04
,php 7
a mysql version Daj mi tomysql Ver 14.14 Distrib 5.7.13, for Linux (x86_64) using EditLine wrapper
Po tej zmianie uruchom poniższe polecenia
sudo service mysql stop sudo service mysql start
Teraz sprawdź tryby sql za pomocą tego zapytania
SELECT @@sql_mode
i powinieneś otrzymać tryby, które właśnie ustawiłeś.źródło
Skopiuj do pliku konfiguracyjnego:
/etc/mysql/my.cnf OR /bin/mysql/my.ini
MySQL
uruchom ponownie.Możesz też to zrobić
MySQL
uruchom ponownie.źródło
sql_mode
zamiastsql-mode
.Dla kogoś, kto szuka w Google tego błędu dla MySQL 8.
MySQL 8.0.11 usuwa 'NO_AUTO_CREATE_USER' z trybu sql.
Zaczerpnięte stąd
Tak, Twój
sql_mode
może być tak:Lub jeśli używasz Dockera , możesz dodać następne polecenie do docker-compose.yml
mysql: image: mysql:8.0.13 command: --sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION ports: - 13306:${MYSQL_PORT}
źródło
Do zmiany tymczasowej użyj następującego polecenia
set global sql_mode="NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLE,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
W celu trwałej zmiany: przejdź do pliku konfiguracyjnego /etc/my.cnf lub /etc/mysql/mysql.conf.d/mysqld.cnf i dodaj następujące wiersze, a następnie uruchom ponownie usługę mysql
źródło
Uzyskaj dostęp do bazy danych jako administrator (może root).
Sprawdź aktualny tryb SQL_mode
mysql> SELECT @@sql_mode;
Aby ustawić nowy tryb_sql, zamknij bazę danych i utwórz plik
z zawartością trybu sql_mode
Zrestartuj MySQL
mysql> sudo service mysql stop mysql> sudo service mysql start
Tworzymy plik w folderze /etc/mysql/conf.d/, ponieważ w głównym pliku konfiguracyjnym /etc/mysql/my.cnf jest napisane polecenie zawierające wszystkie pliki ustawień z folderu / etc / mysql / conf. re/
źródło
W moim przypadku muszę zmienić plik
/etc/mysql/mysql.conf.d/mysqld.cnf
zmień to pod [mysqld
]Wklej tę linię w
mysqld
części [ ]źródło
Właśnie miałem podobny problem, w którym MySQL (5.6.45) nie akceptował
sql_mode
żadnego pliku konfiguracyjnego.Rozwiązaniem było dodanie
init_file = /etc/mysql/mysql-init.sql
do pliku konfiguracyjnego, a następnie wykonanieSET GLOBAL sql_mode = '';
w nim.źródło
Sprawdź dokumentację sql_mode
Metoda 1:
Sprawdź domyślną wartość sql_mode:
SELECT @@sql_mode //check current value for sql_mode SET GLOBAL sql_mode = "NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLE,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";
Metoda 2:
Uzyskaj dostęp do phpmyadmin, aby edytować plik
sql_mode
Zrestartuj serwer po wykonaniu powyższych czynności
źródło
W moim przypadku mysql i ubuntu 18.04
Ustawiłem go na stałe za pomocą tego polecenia
Dołącz wiersz po konfiguracji. Zobacz przykład zaznaczony na poniższym obrazku.
Zobacz informacje o dostępnych trybach sql i dokumentacja
Mam nadzieję że to pomoże :-)
źródło
Jeśli ktoś chce ustawić go tylko dla bieżącej sesji, użyj następującego polecenia
set session sql_mode="NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLE,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
źródło
źródło