Rumah  >  Artikel  >  pangkalan data  >  Artikel yang menerangkan secara terperinci tetapan MySQL only_full_group_oleh masalah pelaporan ralat

Artikel yang menerangkan secara terperinci tetapan MySQL only_full_group_oleh masalah pelaporan ralat

藏色散人
藏色散人ke hadapan
2023-01-24 07:30:012544semak imbas

Artikel yang menerangkan secara terperinci tetapan MySQL only_full_group_oleh masalah pelaporan ralat

Persekitaran pembangunan disambungkan kepada mysql5.6, manakala persekitaran ujian adalah kepada mysql5.7. Semasa pembangunan, seorang rakan menulis kenyataan group by tentang sql. Ia berjalan seperti biasa dalam persekitaran pembangunan, tetapi pengecualian ditemui dalam persekitaran ujian.

Analisis sebab: Versi MySQL5.7 mempunyai atribut mysql sql_mode = only_full_group_by yang ditetapkan secara lalai, menyebabkan ralat.

Antaranya, ONLY_FULL_GROUP_BY adalah punca ralat ini dalam mod ketat ini, untuk operasi pengagregatan group by, jika lajur dalam select tidak muncul dalam group by, maka Ini <.> adalah haram. Kerana dalam SQL yang ditulis oleh pembangun, lajur sql tiada dalam klausa select dan ralat akan dilaporkan apabila menggunakan group by. group by

Persekitaran ujian memuat turun dan memasang versi terkini

dan mod mysql5.7.x didayakan secara lalai. only_full_group_by

1. Semak sql_mode

SELECT` `@@sql_mode;
Nilai pertanyaan ialah:

SAHAJA_PENUH_GROUP_OLEH,STRICT_TRANS_TABLES_DATE,NO_NO_IN_TARIKH,NO_NO_NO_IN_DATE NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION

2. Alih keluar SAHAJA_FULL_GROUP_BY dan tetapkan semula nilai.

SET` `@@``global``.sql_mode =``'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'``;

3. Perkara di atas menukar mod_sql global, yang sah untuk pangkalan data yang baru dibuat.

Untuk pangkalan data sedia ada, anda perlu melaksanakannya di bawah data yang sepadan

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'``;

Kaedah di atas masih tidak sah selepas memulakan semula pangkalan data mysql kaedah masih berkesan selepas dimulakan semula. kata kunci ini dalam fail konfigurasi, jadi saya menambahnya secara manual Masukkan:

Satu perkara yang perlu diambil perhatian ialah ia mesti ditambah dalam konfigurasi

, supaya ia akan berkuat kuasa selepas menambah MySQL dan mulakannya semula. Keluar dari pangkalan data: keluar, mulakan semula perintah: linux/etc/my.cnfsql_mode Muat semula halaman dan mesej ralat hilang sambung semula ke pangkalan data untuk melihat

Konfigurasi
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
:

<. . lebih berkaitan dalam group by maka sql ini menyalahi undang-undang kerana lajur tidak berada klausa>[mysqld]mysqlNO_AUTO_VALUE_ON_ZERO: Nilai ini mempengaruhi sisipan lajur yang meningkat secara automatik. Di bawah tetapan lalai, memasukkan 0 atau NULL mewakili penjanaan nilai peningkatan automatik seterusnya. Pilihan ini berguna jika pengguna ingin memasukkan nilai 0 dan lajur meningkat secara automatik.

service mysqld restart

#lnmp重启mysql
lnmp restart mysql
STRICT_TRANS_TABLES: Dalam mod ini, jika nilai tidak boleh dimasukkan ke dalam jadual transaksi, operasi semasa akan terganggu dan tiada had pada jadual bukan transaksi

sql_modeNO_ZERO_IN_DATE: Dalam mod ketat, tarikh dan bulan sifar tidak dibenarkan select @@sql_mode

NO_ZERO_DATE: Tetapkan nilai ini, pangkalan data mysql tidak membenarkan sisipan tarikh sifar, dan memasukkan tarikh sifar akan menimbulkan ralat dan bukannya amaran.

ERROR_FOR_DIVISION_BY_ZERO: Semasa proses INSERT atau UPDATE, jika data dibahagikan dengan sifar, ralat dijana dan bukannya amaran. Jika mod tidak diberikan, MySQL mengembalikan NULL apabila data dibahagikan dengan sifar

NO_AUTO_CREATE_USER: Melumpuhkan GRANT daripada mencipta pengguna dengan kata laluan kosong

Mysql5.7NO_ENGINE_SUBSTITUTION: Jika enjin storan yang diperlukan dilumpuhkan atau tidak disusun, maka ralat dilemparkan. Apabila nilai ini tidak ditetapkan, enjin storan lalai digunakan dan pengecualian dilemparkan ONLY_FULL_GROUP_BYMysql5.7 ONLY_FULL_GROUP_BYPIPES_AS_CONCAT: Anggap "||" sebagai operator sambungan rentetan dan bukannya operator OR, yang sama dengan pangkalan data Oracle Begitu juga, ia serupa dengan fungsi penggabungan rentetan Concat

ANSI_QUOTES: Selepas mendayakan ANSI_QUOTES, petikan berganda tidak boleh digunakan untuk memetik rentetan kerana ia ditafsirkan sebagai pengecam. Pembelajaran yang disyorkan: "

Tutorial Video MySQL

"

Atas ialah kandungan terperinci Artikel yang menerangkan secara terperinci tetapan MySQL only_full_group_oleh masalah pelaporan ralat. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:learnku.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam