Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zaktualizuj tryb SQL w MySQL

MySQL zmienił domyślną wartość zmiennej sql_mode od poprzednich wydań, które łamią istniejący kod w kilku aplikacjach. Ten samouczek wyjaśnia, jak zmienić tryb sql_mode zgodnie z funkcjami aplikacji. Zawiera również instrukcje zachowania tej wartości po ponownym uruchomieniu serwera.

Notatki :Możesz również skorzystać z samouczków MySQL - Jak zainstalować MySQL 8 na Ubuntu, Jak całkowicie usunąć MySQL z Ubuntu i Naucz się podstawowych zapytań SQL przy użyciu MySQL.

Domyślna wartość zmiennej sql_mode w MySQL 8 jest pokazana poniżej.

# Default - sql_mode
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

W moim przypadku opcja ONLY_FULL_GROUP_BY łamie kod, dlatego usunę go do demonstracji cel .

Aktualizuj bezpośrednio

Możemy bezpośrednio zaktualizować wartość sql_mode używając poleceń, jak pokazano poniżej.

# Login
mysql -u root -p

# Globally
SET GLOBAL sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION";

# Session
SET SESSION sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION";

Wartość sql_mode zostanie zmieniona za pomocą powyższych zapytań. Problem polega na tym, że zmienna odzyskuje swoją domyślną wartość po restarcie serwera. Możemy zachować wartość, jak pokazano w następnej sekcji.

Aktualizuj na stałe

Możemy zachować wartość sql_mode, aktualizując my.cnf plik. Lokalizacja tego pliku różni się w zależności od środowiska i wersji serwera. Najczęstsze lokalizacje tego pliku to/etc/my. cnf , /etc/mysql /my.cnf oraz /usr /etc/my.cnf . Może również znajdować się w lokalnej ścieżce użytkownika ~/.my.cnf . W moim systemie z Ubuntu 18.04 LTS i MySQL 8 znalazłem ten plik pod adresem /etc/mysql /my.cnf .

Na Linux Mint 18 , lokalizacja pliku to /usr /my.cnf . Możesz także przeszukać plik za pomocą polecenia, jak pokazano poniżej.

# Search the default config
mysqld --verbose --help | grep -A 1 "Default options"

# Output
Default options are read from the following files in the given order: /etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf

Serwer MySQL przyjrzy się wyżej wymienionym lokalizacjom pod kątem domyślnych konfiguracji zarówno na poziomie systemu, jak i na poziomie lokalnym. Zaktualizuj plik my.cnf, jak pokazano poniżej. Użyłem edytora nano do demonstracji cel .

# Update my.cnf
sudo nano /etc/mysql/my.cnf

# Scroll down and update the file as shown below

...
...
# # The MySQL Server configuration file. # # For explanations see # http://dev.mysql.com/doc/mysql/en/server-system-variables.html # * IMPORTANT: Additional settings that can override those from this file! # The files must end with '.cnf', otherwise they'll be ignored. # !includedir /etc/mysql/conf.d/ !includedir /etc/mysql/mysql.conf.d/ [mysqld] sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"

Teraz zapisz plik i wyjdź z edytora. Pamiętaj, aby dołączyć [mysqld] nad zmienną.

Zrestartuj serwer MySQL, aby ustawić wartość zmiennej sql_mode skonfigurowaną przez nas w pliku my.cnf, jak pokazano powyżej.

# Using init
sudo /etc/init.d/mysqld restart
# OR
sudo /etc/init.d/mysql restart

# Using service
sudo service mysql restart

# Using systemd
sudo systemctl restart mysqld.service
# OR
sudo systemctl restart mysql

Podsumowanie

W tym samouczku zaktualizowaliśmy wartość zmiennej MySQL sql_mode a także zachował go na stałe przy restarcie serwera.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak działa funkcja TO_BASE64() w MySQL

  2. Jak mogę użyć PDO do pobrania tablicy wyników w PHP?

  3. Jak wykonać procedurę składowaną w środowisku roboczym MySQL?

  4. SQLSTATE[42000]:Błąd składni lub naruszenie dostępu:1064 Wystąpił błąd w składni SQL — PHP — PDO

  5. Jak zaimportować plik SQL za pomocą wiersza poleceń w MySQL?