MySQL změnilo výchozí hodnotu proměnné sql_mode od předchozích verzí, což narušuje stávající kód v několika aplikacích. Tento tutoriál vysvětluje, jak změnit sql_mode podle funkcí aplikace. Poskytuje také kroky k zachování této hodnoty při restartu serveru.
Poznámky :Můžete také sledovat výukové programy MySQL – Jak nainstalovat MySQL 8 na Ubuntu, Jak úplně odebrat MySQL z Ubuntu a Naučte se základní SQL dotazy pomocí MySQL.
Výchozí hodnota proměnné sql_mode v MySQL 8 je uvedena níže.
# 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
V mém případě možnost ONLY_FULL_GROUP_BY porušuje kód, proto jej pro demonstraci odstraním
Přímá aktualizace
Můžeme přímo aktualizovat hodnotu sql_mode pomocí níže uvedených příkazů.
# 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";
Hodnota sql_mode bude změněna pomocí výše uvedených dotazů. Problém je v tom, že proměnná získá zpět svou výchozí hodnotu při restartu serveru. Hodnotu můžeme zachovat, jak je uvedeno v další části.
Trvalá aktualizace
Hodnotu sql_mode můžeme zachovat aktualizací my.cnf soubor. Umístění tohoto souboru se liší v závislosti na prostředí serveru a verzi. Mezi nejčastější umístění tohoto souboru patří/etc/my.
Na Linux Mint 18 , umístění souboru je /
# 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
Server MySQL se podívá na výše uvedená umístění pro výchozí konfigurace na systémové i místní úrovni. Aktualizujte soubor my.cnf, jak je znázorněno níže. Pro ukázku jsem použil nano editor
# 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"
Nyní uložte soubor a ukončete editor. Nezapomeňte uvést [mysqld] nad proměnnou.
Restartujte server MySQL, abyste nastavili hodnotu proměnné sql_mode, jak jsme ji nakonfigurovali v souboru my.cnf, jak je uvedeno výše.
# 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
Shrnutí
V tomto tutoriálu jsme aktualizovali hodnotu proměnné MySQL sql_mode a také jej trvale uchoval při restartu serveru.