Saya secara tidak sengaja mengaktifkan mode ONLY_FULL_GROUP_BY seperti ini:
SET sql_mode = 'ONLY_FULL_GROUP_BY';
Bagaimana cara menonaktifkannya?
mysql
mysql-workbench
ZviBar
sumber
sumber
SET sql_mode = ''
?column
) untuk me -retrofit permintaan Anda. Lihat dokumen di siniJawaban:
Solusi 1: Hapus ONLY_FULL_GROUP_BY dari konsol mysql
Anda dapat membaca lebih lanjut di sini
Solusi 2: Hapus ONLY_FULL_GROUP_BY dari phpmyadmin
sumber
REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','')
, MySQL tetap menghapus koma yang tidak diinginkan dari catatan. Jawaban OP benar.GLOBAL
tidak bekerja untuk saya, tetapiSESSION
berhasil.SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
Memperbarui:
Untuk mempertahankan dan menonaktifkan pengaturan mysql Anda saat ini,
ONLY_FULL_GROUP_BY
saya sarankan untuk mengunjungi phpmyadmin Anda atau klien apa pun yang Anda gunakan dan ketik:SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','') copy_me
hasil salinan selanjutnya ke
my.ini
file Anda .mint :
sudo nano /etc/mysql/my.cnf
ubuntu 16 dan lebih tinggi :
sudo nano /etc/mysql/my.cnf
ubuntu 14-16 :
/etc/mysql/mysql.conf.d/mysqld.cnf
Peringatan!
copy_me
hasil dapat berisi teks panjang yang mungkin dipangkas secara default. Pastikan Anda menyalin seluruh teks!jawaban lama:
Jika Anda ingin menonaktifkan kesalahan secara permanen " Ekspresi #N dari daftar SELECT tidak dalam klausa GROUP BY dan berisi kolom nonaggregated 'db.table.COL' yang tidak secara fungsional bergantung pada kolom dalam klausa GROUP BY, ini tidak sesuai dengan sql_mode = only_full_group_by "lakukan langkah-langkah itu:
sudo nano /etc/mysql/my.cnf
Tambahkan ini ke akhir file
sudo service mysql restart
untuk me-restart MySQLIni akan menonaktifkan
ONLY_FULL_GROUP_BY
untuk SEMUA penggunasumber
/etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
mungkin tidak ada di file ini, mungkin di direktori include. Gunakan perintah ini terlebih dahulu:grep -R "\[mysqld\]" *
untuk melihat apa yang ada - dan dalam hal ini cobagrep -R "\bsql_mode\b" *
Hati-hati menggunakan
Ini sebenarnya membersihkan semua mode yang saat ini diaktifkan. Jika Anda tidak ingin mengacaukan dengan pengaturan lain, Anda ingin melakukan
pertama, untuk mengaktifkan daftar mode yang dipisahkan koma, lalu SET ke daftar ini tanpa
ONLY_FULL_GROUP_BY
opsi.sumber
then SET it to this list without the ONLY_FULL_GROUP_BY option.
:?SET sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
sql_mode=<comma-separated-list>
:, lalu berhenti dan mulai server Anda. Ikuti dokumen untuk sistem operasi Anda untuk lokasi, dan cara terbaik untuk mengedit, my.cnf.Cobalah ini:
Catatan Komunitas: Seperti yang ditunjukkan dalam jawaban di bawah, ini sebenarnya menghapus semua mode SQL yang saat ini diaktifkan. Itu belum tentu yang Anda inginkan.
sumber
''
='full group by is disabled'
? MySQL melakukan beberapa hal yang sangat bodoh tetapi yang di atas sana.0 rows affected
dan permintaan saya masih tidak berfungsi:Error Code: 1055. Expression #6 of SELECT list is not in GROUP BY clause and contains nonaggregated column ...
global
dalam perintah .sumber
sql_mode
rollback ke nilai sebelumnya. Apa yang bisa saya lakukan sekarang?Menambahkan hanya satu mode ke sql_mode tanpa menghapus yang sudah ada:
Menghapus hanya mode tertentu dari sql_mode tanpa menghapus yang lain:
Dalam kasus Anda, jika Anda ingin menghapus hanya
ONLY_FULL_GROUP_BY
mode, maka gunakan perintah di bawah ini:Referensi: http://johnemb.blogspot.com/2014/09/adding-or-removing-individual-sql-modes.html
sumber
Terima kasih kepada @cwhisperer. Saya memiliki masalah yang sama dengan Doctrine di aplikasi Symfony. Saya baru saja menambahkan opsi ke config.yml saya:
Ini bekerja dengan baik untuk saya.
sumber
SET NAMES
menggunakan metode ini, dalam banyak kasus tidak diperlukan symfony sudah mengaturnya melalui doctrine.dbal.charset cofnig: symfony.com/doc/current/reference/configuration/doctrine.html , dan melakukannya dengan benar melalui PDO dns, SET NAMES adalah cara yang sudah ketinggalan zaman, yang seharusnya tidak digunakan untuk versi PHP yang lebih besar dari 5.3Di:
Melakukan:
Salin dan tempel:
Ke bagian bawah file
sumber
/etc/mysql/mysql.cnf
menunjuk ke 2 folder konfigurasi!includedir /etc/mysql/conf.d/
+!includedir /etc/mysql/mysql.conf.d/
. Sama berlaku untuk/etc/mysql/my.cnf
. Oleh karena itu saya berasumsi bahwa file konfigurasi tidak diganti setelah pembaruan. Anda dapat membaca lebih lanjut di sinihttp://dev.mysql.com/doc/mysql/en/server-system-variables.html
sql_mode = "STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
mungkin penting untuk membuat file baru/etc/mysql/mysql.conf.d/mysqld_mode.cnf
sebagai gantinyaSaya perhatikan bahwa solusi @Eyo Okon Eyo berfungsi selama server MySQL tidak direstart, kemudian pengaturan default dipulihkan. Ini solusi permanen yang bekerja untuk saya:
Untuk menghapus mode SQL tertentu (dalam hal ini ONLY_FULL_GROUP_BY ), cari mode SQL saat ini:
salin hasilnya dan hapus apa yang tidak Anda butuhkan ( ONLY_FULL_GROUP_BY )
misalnya:
untuk
buat dan buka file ini:
dan tulis dan lewati ke dalamnya mode SQL baru Anda:
restart MySQL:
Atau Anda dapat menggunakan
ANY_VALUE()
untuk menekan ONLY_FULL_GROUP_BY penolakan nilai, Anda dapat membaca lebih lanjut tentang hal ini di sinisumber
ANY_VALUE()
The dokumentasi MySQL juga menentukan metode berikut:
sql-mode="<modes>"
dalam file opsi seperti my.cnf (sistem operasi Unix) atau my.ini (Windows).--sql-mode="<modes>"
opsi.* Di mana
<modes>
daftar mode yang berbeda dipisahkan oleh koma.Untuk menghapus mode SQL secara eksplisit, atur ke string kosong menggunakan
--sql-mode=""
pada baris perintah, atausql-mode=""
dalam file opsi.Saya menambahkan
sql-mode=""
opsi ke/etc/my.cnf
dan itu berhasil.Solusi SO ini membahas cara untuk mencari tahu file my.cnf mana yang sedang digunakan oleh MySQL.
Jangan lupa untuk me-restart MySQL setelah membuat perubahan.
sumber
SELECT @@GLOBAL.sql_mode;
Jika Anda menggunakan WAMP. Klik kiri pada ikon WAMP lalu goto MySQL -> pengaturan MySQL -> sql-mode dan kemudian pilih sql-mode-> mode pengguna
sumber
Di sql saya (versi 5.7.11 berjalan pada Mac OS X) ini berfungsi untuk saya di klien shell mysql:
Menurut Dokumentasi MySQL 5.6, sql_mode adalah default
string kosong di MySQL 5.6.5 dan kembali NO_ENGINE_SUBSTITUTION, STRICT_TRANS_TABLES dalam 5.6.6 +
referensi mysql 5.6
sumber
sql_mode := ''
dimungkinkan. Mengapa Anda tidak setuju?Di MySQL 5.7 dan Ubuntu 16.04, edit file mysql.cnf.
Sertakan sql_mode seperti berikut dan simpan file.
Perhatikan bahwa, dalam kasus saya, saya menghapus mode STRICT_TRANS_TABLES dan ONLY_FULL_GROUP_BY.
Melakukan ini, itu akan menyimpan konfigurasi mode secara permanen. Berbeda jika Anda hanya memperbarui @@ sql_mode melalui MySQL, karena itu akan mengatur ulang pada mesin / layanan restart.
Setelah itu, agar konfigurasi yang dimodifikasi berfungsi, restart layanan mysql:
Cobalah mengakses mysql:
Jika Anda dapat masuk dan mengakses konsol MySQL, tidak apa-apa. Bagus!
TAPI , jika seperti saya, Anda menghadapi kesalahan "variabel tidak dikenal sql_mode" , yang menunjukkan bahwa sql_mode adalah opsi untuk mysqld , Anda harus kembali, mengedit file mysql.cnf lagi dan mengubah
[mysql]
ke[mysqld]
. Mulai ulang layanan MySQL dan lakukan tes terakhir mencoba masuk pada konsol MySQL. Ini dia!sumber
Ini yang saya lakukan untuk memperbaiki meja kerja Mysql:
Sebelum saya mendapat nilai saat ini dengan perintah di bawah ini
kemudian saya menghapus kunci ONLY_FULL_GROUP_BY dari daftar dan saya menempelkan perintah di bawah ini
sumber
Untuk Mac OS Mojave (10.14) Buka terminal
Rekatkan sebagai berikut:
Shortkeys to Save & Exit nano:
Ctrl+x
andy
danEnter
Catatan: Anda mungkin perlu memperbarui
mysql-5.7.24-macos10.14-x86_64
dalam perintah ini, cukup periksa nama folder yang benar yang ada di dalamnya/usr/local/
Semoga ini bisa membantu seseorang!
sumber
Tambah atau Hapus mode ke
sql_mode
MySQL 5.7.9 atau lebih baru
Untuk menambah atau menghapus mode
sql_mode
, Anda dapat menggunakanlist_add
danlist_drop
fungsinya.Untuk menghapus mode dari saat ini
SESSION.sql_mode
, Anda dapat menggunakan salah satu dari berikut ini:Untuk menghapus mode dari
GLOBAL.sql_mode
yang ada untuk operasi runtime saat ini , hingga layanan dimulai kembali .MySQL 5.7.8 atau sebelumnya
Karena
sql_mode
nilainya adalah string mode CSV, Anda perlu memastikan bahwa string tersebut tidak mengandung koma residual, yang dapat diselesaikan dengan menggunakanTRIM(BOTH ',' FROM ...)
.Untuk menghapus mode dari
sql_mode
variabel, Anda ingin menggunakannyaREPLACE()
bersamaTRIM()
untuk memastikan setiap koma residual dihapus.Untuk menambahkan mode ke
sql_mode
variabel, Anda ingin menggunakanCONCAT_WS(',', ...)
, untuk memastikan koma ditambahkan dengan mode saat ini danTRIM()
untuk memastikan setiap koma residual dihapus.Kembalikan ke
GLOBAL.sql_mode
Karena
SET sql_mode = 'ONLY_FULL_GROUP_BY';
dijalankan tanpaGLOBAL
pengubah, perubahan hanya memengaruhi nilaiSESSION
kondisi saat ini , yang juga berkaitan dengan@@sql_mode
. Untuk menghapusnya dan kembali ke default global pada nilai restart server , Anda ingin menggunakan nilai dari@@GLOBAL.sql_mode
. [sic]Untuk mengembalikan nilai status sesi saat ini ke nilai global saat ini, Anda dapat menggunakan salah satu dari berikut ini:
Ubah
SESSION.sql_mode
nilai menjadiONLY_FULL_GROUP_BY
Kembalikan
SESSION.sql_mode
nilai keGLOBAL.sql_mode
nilaiServer Restart Gigih
sql_mode
Silakan lihat versi MySQL Anda untuk menentukan mode yang didukung dan default .
sql_mode
Nilai defaultKarena nilai dokumentasi per versi MySQL telah dihapus, saya telah menambahkannya di sini untuk referensi Anda.
MySQL> = 8.0.11 8.0.5 - 8.0.10 Dilewati
MySQL> = 5.7.8, <= 8.0.4
MySQL 5.7.7
MySQL> = 5.7.5, <= 5.7.6
MySQL> = 5.6.6, <= 5.7.4
MySQL <= 5.6.5
sumber
Jika Anda menggunakan MySQL 8.0.11, Anda harus menghapus 'NO_AUTO_CREATE_USER' dari sql-mode.
Tambahkan baris berikut dalam file
/etc/mysql/my.cnf
dan tajuk [mysqld]sumber
Saya menggunakan doktrin dan saya telah menambahkan driverOptions di doctrine.local.php saya:
Dalam phpmyadmin, pengguna perlu SUPER diaktifkan di hak istimewa.
sumber
Untuk siapa yang menjalankan VPS / Server dengan cPanel / WHM , Anda dapat melakukan hal berikut untuk menonaktifkan ONLY_FULL_GROUP_BY secara permanen
Anda memerlukan akses root (baik di VPS atau server khusus)
Masukkan WHM sebagai root dan jalankan phpMyAdmin
Klik pada Variabel, cari
sql_mode
, klik pada 'Edit' dan salin seluruh baris di dalam kotak teks itumisalnya salin ini:
Terhubung ke server Anda melalui SFTP - SSH (root) dan unduh file
/etc/my.cnf
Buka dengan
my.cnf
file editor teks pada PC lokal Anda dan rekatkan ke dalamnya (di bawah[mysqld]
bagian) seluruh baris yang Anda salin pada langkah (2) tetapi hapusONLY_FULL_GROUP_BY,
mis. tempel ini:
Simpan
my.cnf
file dan unggah kembali ke/etc/
Masukkan WHM dan pergi ke "WHM> Restart Services> SQL Server (MySQL)" dan restart layanan
sumber
Saya bekerja dengan mysql dan terdaftar dengan pengguna root, solusi yang berfungsi untuk saya adalah sebagai berikut:
sumber
Ini adalah solusi permanen untuk MySql 5.7+ di Ubuntu 14+:
Jika Anda dapat masuk tanpa kesalahan - Anda harus siap sekarang.
sumber
Anda dapat menonaktifkannya menggunakan file konfigurasi
my.cnf
:Jadi di macOS 10.12, di
usr/local/etc/my.cnf
. Anda dapat mengedit disql_mode
sini:sumber
Ini solusi saya mengubah konfigurasi Mysql melalui dashboard phpmyadmin:
Untuk memperbaiki "ini tidak kompatibel dengan sql_mode = only_full_group_by": Buka Halaman Utama phpmyadmin dan goto dan pilih submenu 'Variabel'. Gulir ke bawah untuk menemukan mode sql. Edit mode sql dan hapus 'ONLY_FULL_GROUP_BY' Simpan.
sumber
dengan MySQL versi 5.7.28 periksa dengan menggunakan
SELECT @@sql_mode;
dan perbarui dengansumber