Saya mencoba untuk mengatur sql_mode di mysql tetapi itu membuat kesalahan.
Perintah:
set global sql_mode='NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLE','NO_AUTO_CREATE_USER','NO_ENGINE_SUBSTITUTION'
Bukankah ini cara yang tepat untuk menyetel banyak mode? Apa keuntungan dari mengatur sesi dan mode global? mana yang lebih diutamakan? Saya memiliki pengguna yang berbeda yang mencoba memperbarui database dengan nilai UNC yang berbeda dan menetapkan pengaturan mode sesi ke 'NO_BACKSLASH_ESCAPES', saya pikir akan masuk akal untuk menggunakan mode gloabl untuk ini. Apakah ini masuk akal?
Tolong beritahu saya.
Terima kasih.
Jawaban:
BTW, jika Anda mengatur global di MySQL:
SET GLOBAL sql_mode = 'NO_ENGINE_SUBSTITUTION'; SET SESSION sql_mode = 'NO_ENGINE_SUBSTITUTION';
Ini tidak akan mengaturnya SECARA PERMANEN , dan akan kembali setelah setiap restart.
Jadi, Anda harus mengatur ini di file konfigurasi Anda (misalnya
/etc/mysql/my.cnf
di bagian [mysqld]), sehingga perubahan tetap berlaku setelah MySQL dimulai ulang:File Konfigurasi: /etc/mysql/my.cnf
PEMBARUAN: Versi MySQL yang lebih baru (mis. 5.7.8 atau yang lebih baru) mungkin memerlukan sintaks yang sedikit berbeda:
Pastikan bahwa ada tanda hubung di antara
sql-mode
bukan garis bawah, dan mode tersebut dalam tanda kutip ganda.Selalu rujuk MySQL Docs untuk versi Anda guna melihat opsi mode sql .
sumber
5.7.20
, dan untuk kasusmysql.ini
, menggunakan garis bawah dan melupakan tanda kutip berfungsi dengan baik, seperti:sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
Saya menyelesaikannya.
mode yang benar adalah:
set global sql_mode="NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLE,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
sumber
Mengatur mode sql secara permanen menggunakan file konfigurasi mysql.
Dalam kasus saya, saya harus mengubah file
/etc/mysql/mysql.conf.d/mysqld.cnf
sepertimysql.conf.d
yang disertakan dalam/etc/mysql/my.cnf
. saya mengubah ini di bawah [mysqld]baru saja menghapus
ONLY_FULL_GROUP_BY
mode sql karena itu menyebabkan masalah.Saya menggunakan
ubuntu 16.04
,php 7
dan mysql --version memberi saya inimysql Ver 14.14 Distrib 5.7.13, for Linux (x86_64) using EditLine wrapper
Setelah perubahan ini, jalankan perintah di bawah ini
sudo service mysql stop sudo service mysql start
Sekarang periksa mode sql dengan kueri ini
SELECT @@sql_mode
dan Anda harus mendapatkan mode yang baru saja Anda atur.sumber
Salin ke File Konfigurasi:
/etc/mysql/my.cnf OR /bin/mysql/my.ini
MySQL
mengulang kembali.Atau Anda juga bisa melakukannya
MySQL
mengulang kembali.sumber
sql_mode
bukansql-mode
.Untuk seseorang yang googling kesalahan ini untuk MySQL 8.
MySQL 8.0.11 menghapus 'NO_AUTO_CREATE_USER' dari sql-mode.
Diambil dari sini
Jadi, Anda
sql_mode
bisa seperti ini:Atau jika Anda menggunakan Docker, Anda dapat menambahkan perintah berikutnya ke docker-compose.yml
mysql: image: mysql:8.0.13 command: --sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION ports: - 13306:${MYSQL_PORT}
sumber
Untuk perubahan sementara gunakan perintah berikut
set global sql_mode="NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLE,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
Untuk perubahan permanen: buka file konfigurasi /etc/my.cnf atau /etc/mysql/mysql.conf.d/mysqld.cnf dan tambahkan baris berikut lalu restart layanan mysql
sumber
Akses database sebagai pengguna administrator (mungkin root).
Periksa SQL_mode saat ini
mysql> SELECT @@sql_mode;
Untuk mengatur sql_mode baru, keluar dari database, buat file
dengan konten sql_mode Anda
Mulai ulang Mysql
mysql> sudo service mysql stop mysql> sudo service mysql start
Kami membuat file di folder /etc/mysql/conf.d/ karena di file konfigurasi utama /etc/mysql/my.cnf perintah ditulis untuk memasukkan semua file pengaturan dari folder / etc / mysql / conf. d /
sumber
Dalam kasus saya, saya harus mengubah file,
/etc/mysql/mysql.conf.d/mysqld.cnf
ubah ini di bawah [mysqld
]Tempel baris ini pada [
mysqld
] porsisumber
Saya baru saja mengalami masalah serupa di mana MySQL (5.6.45) tidak akan menerima
sql_mode
dari file konfigurasi apa pun.Solusinya adalah menambahkan
init_file = /etc/mysql/mysql-init.sql
ke file konfigurasi dan kemudian mengeksekusiSET GLOBAL sql_mode = '';
di sana.sumber
Periksa dokumentasi sql_mode
Metode 1:
Periksa nilai default dari sql_mode:
SELECT @@sql_mode //check current value for sql_mode SET GLOBAL sql_mode = "NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLE,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";
Metode 2:
Akses phpmyadmin untuk mengedit file
sql_mode
Mulai ulang server setelah menjalankan hal-hal di atas
sumber
Dalam kasus saya mysql dan ubuntu 18.04
Saya mengaturnya secara permanen menggunakan perintah ini
Tambahkan baris setelah konfigurasi. Lihat contoh yang disorot pada gambar di bawah.
Lihat Referensi dan Dokumentasi mode sql yang tersedia
Semoga ini membantu :-)
sumber
Jika seseorang ingin mengaturnya hanya untuk sesi saat ini, gunakan perintah berikut
set session sql_mode="NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLE,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
sumber
sumber