MySQL har ändrat standardvärdet för variabeln sql_mode sedan tidigare utgåvor som bryter den befintliga koden i flera applikationer. Denna handledning förklarar hur du ändrar sql_mode enligt applikationsfunktionerna. Den innehåller också stegen för att bevara detta värde vid omstarten av servern.
Anteckningar :Du kan också följa MySQL-handledningarna - Hur man installerar MySQL 8 på Ubuntu, hur man tar bort MySQL helt från Ubuntu och lär dig grundläggande SQL-frågor med MySQL.
Standardvärdet för variabeln sql_mode i MySQL 8 är som visas nedan.
# 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 mitt fall alternativet ONLY_FULL_GROUP_BY bryter koden, därför tar jag bort den för demonstration
Uppdatera direkt
Vi kan direkt uppdatera värdet för sql_mode med hjälp av kommandona som visas nedan.
# 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ärdet för sql_mode kommer att ändras med hjälp av ovan nämnda frågor. Problemet är att variabeln får tillbaka sitt standardvärde vid omstart av servern. Vi kan bevara värdet som visas i nästa avsnitt.
Uppdatera permanent
Vi kan bevara värdet på sql_mode genom att uppdatera my.cnf fil. Platsen för denna fil varierar beroende på servermiljön och versionen. De vanligaste platserna för denna fil inkluderar/etc/my.
På Linux Mint 18 , filplatsen är /
# 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-servern kommer att titta på de ovan nämnda platserna för standardkonfigurationer både på systemnivå och lokal nivå. Uppdatera filen my.cnf enligt nedan. Jag har använt nanoredigeraren för 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"
Spara nu filen och avsluta redigeraren. Se till att inkludera [mysqld] ovanför variabeln.
Starta om MySQL-servern för att ställa in värdet på variabeln sql_mode som konfigurerats av oss i filen my.cnf som visas ovan.
# 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
Sammanfattning
I den här handledningen har vi uppdaterat värdet på MySQL-variabeln sql_mode och bevarade den permanent vid serverns omstart.