Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Perbarui Mode SQL Di MySQL

MySQL telah mengubah nilai default dari variabel sql_mode sejak rilis sebelumnya yang melanggar kode yang ada di beberapa aplikasi. Tutorial ini menjelaskan cara mengubah sql_mode sesuai dengan fitur aplikasi. Ini juga menyediakan langkah-langkah untuk mempertahankan nilai ini pada server restart.

Catatan :Anda juga dapat mengikuti tutorial MySQL - Cara Menginstal MySQL 8 di Ubuntu, Cara Menghapus Sepenuhnya MySQL Dari Ubuntu, dan Mempelajari Query SQL Dasar Menggunakan MySQL.

Nilai default dari variabel sql_mode di MySQL 8 adalah seperti yang ditunjukkan di bawah ini.

# 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

Dalam kasus saya, opsi ONLY_FULL_GROUP_BY melanggar kode, maka saya akan menghapusnya untuk demonstrasi tujuan .

Perbarui Langsung

Kami dapat langsung memperbarui nilai sql_mode menggunakan perintah seperti yang ditunjukkan di bawah ini.

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

Nilai sql_mode akan diubah menggunakan kueri yang disebutkan di atas. Masalahnya adalah bahwa variabel mendapatkan kembali nilai defaultnya pada server restart. Kita dapat mempertahankan nilainya seperti yang ditunjukkan di bagian berikutnya.

Perbarui Secara Permanen

Kami dapat mempertahankan nilai sql_mode dengan memperbarui my.cnf mengajukan. Lokasi file ini berbeda berdasarkan lingkungan dan versi server. Lokasi paling umum dari file ini termasuk/etc/my. cnf , /etc/mysql /my.cnf , dan /usr /etc/my.cnf . Mungkin juga di jalur lokal pengguna ~/.my.cnf . Di sistem saya yang memiliki Ubuntu 18.04 LTS dan MySQL 8, saya menemukan file ini di /etc/mysql /my.cnf .

Di Linux Mint 18 , lokasi file adalah /usr /my.cnf . Anda juga dapat mencari file menggunakan perintah seperti yang ditunjukkan di bawah ini.

# 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 akan melihat lokasi yang disebutkan di atas untuk konfigurasi default baik di tingkat sistem dan tingkat lokal. Perbarui file my.cnf seperti yang ditunjukkan di bawah ini. Saya telah menggunakan editor nano untuk demonstrasi tujuan .

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

Sekarang simpan file, dan keluar dari editor. Pastikan untuk menyertakan [mysqld] di atas variabel.

Restart server MySQL untuk mengatur nilai variabel sql_mode seperti yang dikonfigurasi oleh kami di file my.cnf seperti yang ditunjukkan di atas.

# 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

Ringkasan

Dalam tutorial ini, kami telah memperbarui nilai variabel MySQL sql_mode dan juga menyimpannya secara permanen di server restart.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tutorial SQL Kunci Utama – Cara Mendefinisikan Kunci Utama dalam Basis Data

  2. MySQL dan GROUP_CONCAT() panjang maksimum

  3. Tidak dapat menggunakan koneksi MySQL untuk kerangka entitas 6

  4. Kesalahan MySql:Tidak dapat memperbarui tabel dalam fungsi/pemicu tersimpan karena sudah digunakan oleh pernyataan yang memanggil fungsi/pemicu tersimpan ini

  5. BIN() – Dapatkan Nilai Biner Angka di MySQL