Mysql
 sql >> Database >  >> RDS >> Mysql

Aggiorna la modalità SQL in MySQL

MySQL ha modificato il valore predefinito della variabile sql_mode dalle versioni precedenti che sta rompendo il codice esistente in diverse applicazioni. Questo tutorial spiega come modificare sql_mode in base alle funzionalità dell'applicazione. Fornisce inoltre i passaggi per preservare questo valore al riavvio del server.

Note :Puoi anche seguire i tutorial di MySQL - Come installare MySQL 8 su Ubuntu, Come rimuovere completamente MySQL da Ubuntu e Impara le query SQL di base usando MySQL.

Il valore predefinito della variabile sql_mode in MySQL 8 è come mostrato di seguito.

# 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

Nel mio caso l'opzione ONLY_FULL_GROUP_BY sta violando il codice, quindi lo rimuoverò a scopo dimostrativo scopo .

Aggiorna direttamente

Possiamo aggiornare direttamente il valore di sql_mode utilizzando i comandi come mostrato di seguito.

# 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";

Il valore sql_mode verrà modificato utilizzando le query sopra menzionate. Il problema è che la variabile ripristina il valore predefinito al riavvio del server. Possiamo preservare il valore come mostrato nella sezione successiva.

Aggiorna permanentemente

Possiamo preservare il valore di sql_mode aggiornando my.cnf file. La posizione di questo file varia in base all'ambiente e alla versione del server. Le posizioni più comuni di questo file includono/etc/my. cf , /etc/mysql /mio.cnf e /usr /etc/mio.cnf . Potrebbe anche trovarsi nel percorso locale dell'utente ~/.my.cnf . Sul mio sistema con Ubuntu 18.04 LTS e MySQL 8, ho trovato questo file in /etc/mysql /mio.cnf .

Su Linux Mint 18 , il percorso del file è /usr /mio.cnf . Puoi anche cercare il file usando il comando come mostrato di seguito.

# 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

Il server MySQL esaminerà le posizioni sopra menzionate per le configurazioni predefinite sia a livello di sistema che a livello locale. Aggiorna il file my.cnf come mostrato di seguito. Ho usato l'editor nano per la dimostrazione scopo .

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

Ora salva il file ed esci dall'editor. Assicurati di includere [mysqld] sopra la variabile.

Riavvia il server MySQL per impostare il valore della variabile sql_mode come da noi configurato nel file my.cnf come mostrato sopra.

# 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

Riepilogo

In questo tutorial, abbiamo aggiornato il valore della variabile MySQL sql_mode e anche conservato permanentemente al riavvio del server.