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
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.
Di Linux Mint 18 , lokasi file adalah /
# 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
# 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.