MySQL har ændret standardværdien for variablen sql_mode siden tidligere udgivelser, hvilket bryder den eksisterende kode i flere applikationer. Denne vejledning forklarer, hvordan du ændrer sql_mode i henhold til applikationsfunktionerne. Den indeholder også trinene til at bevare denne værdi ved genstart af serveren.
Noter :Du kan også følge MySQL tutorials - Sådan installeres MySQL 8 på Ubuntu, Sådan fjerner du MySQL fuldstændigt fra Ubuntu, og lær grundlæggende SQL-forespørgsler ved hjælp af MySQL.
Standardværdien for variablen sql_mode i MySQL 8 er som vist nedenfor.
# 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
I mit tilfælde muligheden ONLY_FULL_GROUP_BY bryder koden, derfor vil jeg fjerne den til demonstration
Opdater direkte
Vi kan direkte opdatere værdien af sql_mode ved hjælp af kommandoerne som vist nedenfor.
# 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";
Værdien for sql_mode vil blive ændret ved hjælp af de ovennævnte forespørgsler. Problemet er, at variablen får sin standardværdi tilbage ved genstart af serveren. Vi kan bevare værdien som vist i næste afsnit.
Opdater permanent
Vi kan bevare værdien af sql_mode ved at opdatere my.cnf fil. Placeringen af denne fil varierer afhængigt af servermiljøet og versionen. De mest almindelige placeringer af denne fil omfatter/etc/my.
På Linux Mint 18 , filplaceringen er /
# 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
MySQL-serveren vil se på de ovennævnte placeringer for standardkonfigurationer både på systemniveau og lokalt niveau. Opdater my.cnf-filen som vist nedenfor. Jeg har brugt nano-editoren til demonstration
# 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"
Gem nu filen, og afslut editoren. Sørg for at inkludere [mysqld] over variablen.
Genstart MySQL-serveren for at indstille værdien af variablen sql_mode som konfigureret af os i filen my.cnf som vist ovenfor.
# 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
Oversigt
I denne vejledning har vi opdateret værdien af MySQL-variablen sql_mode og også bevaret det permanent på servergenstarten.