Apa cara yang benar untuk mengembalikan mode ketat Mysql 5.7 kembali ke seperti di 5.6?


10

Saya telah memutakhirkan server kami ke Ubuntu 16 yang mencakup Mysql 5.7 dan, secara default, Mode Ketat diaktifkan (walaupun tidak ada entri untuk itu di salah satu file konfigurasi).

Kami mengalami masalah saat mengimpor basis data yang sedang diproduksi di bawah mysql 5.6 dan sebelumnya, dan itu karena mode yang ketat. Secara default, inilah yang diaktifkan:

STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ONLY_FULL_GROUP_BY

Bagaimana saya bisa mengonfigurasi mysql 5.7 agar berfungsi persis seperti di 5.6 atau sehingga basis data dari 5.6 kompatibel dengan 5.7?


Coba jawaban ini: stackoverflow.com/a/34426883/534883 acara meskipun untuk OSX, itu bekerja untuk saya di Ubuntu.
Pit

Jawaban:


34

Untuk menonaktifkan mode SQL ketat, SSH masuk ke server Anda rootdan buat file ini:

/etc/mysql/conf.d/disable_strict_mode.cnf

Buka file dan masukkan dua baris ini:

[mysqld]
sql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

Mulai ulang MySQL dengan perintah ini:

sudo service mysql restart

Perubahan ini menonaktifkan dua pengaturan mode SQL, STRICT_TRANS_TABLESdan ONLY_FULL_GROUP_BY, yang ditambahkan di MySQL 5.7 dan menyebabkan masalah untuk beberapa aplikasi yang lebih lama.

Mengkonfirmasi Mode SQL Ketat Dinonaktifkan

Anda dapat mengkonfirmasi mode SQL ketat dinonaktifkan dengan menjalankan perintah ini sebagai root:

 sudo mysql -i -BN -e 'SELECT @@sql_mode' | grep -E 'ONLY_FULL_GROUP_BY|STRICT_TRANS_TABLES'

Jika mode ketat dinonaktifkan, Anda tidak akan melihat output dari perintah itu.

Jika menonaktifkan mode ketat menyebabkan masalah bagi Anda, Anda dapat mengaktifkannya lagi dengan menghapus file itu dan memulai kembali MySQL.

Sumber: Cara Menonaktifkan Mode SQL Ketat di MySQL 5.7


2
Ini adalah jawaban yang benar, dan ini seharusnya ditandai sebagai diterima.
budhajeewa

Mengapa menjalankan perintah mysql perintah pengembalian: mysql: [ERROR] Found option without preceding group in config file /etc/mysql/conf.d/disable_strict_mode.cnf at line 1!?
Abhishek Saini

1
@AbhishekSaini, lihat ini dan ini .
Bilal

1
Ini jawabannya. Silakan merujuk ini sebagai jawaban.
Lasitha Benaragama

0

Set sql_modedi /etc/mysql/mysql.conf.d/mysqld.cnftanpa STRICT_TRANS_TABLES.

Tambahkan di bawah [mysqld]:

sql_mode = NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.