sql >> Databasteknik >  >> RDS >> Mysql

Uppdatera SQL-läge i MySQL

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 ändamål .

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. cnf , /etc/mysql /my.cnf , och /usr /etc/my.cnf . Det kan också vara på den lokala sökvägen för användaren ~/.my.cnf . På mitt system med Ubuntu 18.04 LTS och MySQL 8 hittade jag den här filen på /etc/mysql /my.cnf .

Linux Mint 18 , filplatsen är /usr /my.cnf . Du kan också söka i filen med kommandot som visas nedan.

# 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 ändamål .

# 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.


  1. Använder Intel Optane Storage för SQL Server

  2. Installera Oracle Fusion Middleware / WebLogic Server 11g

  3. Hur LEFT() fungerar i MariaDB

  4. Hur man ställer in varje objekt som hämtas från SQLite-databasen till en egen textvy