Heim Datenbank MySQL-Tutorial Ein Artikel, der das Fehlerberichterstattungsproblem der MySQL-Einstellung only_full_group_by ausführlich erläutert

Ein Artikel, der das Fehlerberichterstattungsproblem der MySQL-Einstellung only_full_group_by ausführlich erläutert

Jan 24, 2023 am 07:30 AM
mysql only_full_group_by

Ein Artikel, der das Fehlerberichterstattungsproblem der MySQL-Einstellung only_full_group_by ausführlich erläutert

Die Entwicklungsumgebung ist mit mysql5.6 verbunden, während die Testumgebung mysql5.7 ist. Während der Entwicklung hat ein Freund eine sql-Anweisung über group by geschrieben. Es läuft normal in der Entwicklungsumgebung, Ausnahmen gibt es jedoch in der Testumgebung. mysql5.6,而测试环境是 mysql5.7。开发中有小伙伴写了有关 group bysql 语句。在开发环境中运行是正常的,而到了测试环境中就发现了异常。

原因分析:MySQL5.7 版本默认设置了 mysql sql_mode = only_full_group_by 属性,导致报错。

其中 ONLY_FULL_GROUP_BY 就是造成这个错误的罪魁祸首了,在这种严格模式下,对于 group by 聚合操作,若在 select 中的列没有在group by 中出现,那么这个 SQL 就是不合法的。因为开发写的 sql 中,select 列不在 group by 从句中,在使用 group by 时就会报错。

测试环境下载安装的是最新版的 mysql5.7.x 版本,默认是开启了 only_full_group_by 模式的。

1. 查看 sql_mode

SELECT` `@@sql_mode;
Nach dem Login kopieren

查询出来的值为:

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

2. 去掉ONLY_FULL_GROUP_BY,重新设置值。

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'``;
Nach dem Login kopieren

3. 上面是改变了全局sql_mode,对于新建的数据库有效。

对于已存在的数据库,则需要在对应的数据下执行

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'``;
Nach dem Login kopieren

以上方法mysql数据库重启后依然无效,下列方式重启后依然生效

找到 MySQL 的配置文件,在 linux 系统上 /etc/my.cnf 文件,查询 sql_mode 字段,我并没有在配置文件中找到这个关键字,所以我手动添加进去:

sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Nach dem Login kopieren

需要注意的一点是一定要添加在 [mysqld] 配置内,这样添加完后重启mysql 才会生效,退出数据库:exit,重启命令:

service mysqld restart

#lnmp重启mysql
lnmp restart mysql
Nach dem Login kopieren

刷新页面报错信息消失成功解决,再次连接上数据库查看 sql_mode 配置 select @@sql_mode :

STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

到此这篇关于 Mysql5.7 及以上版本 ONLY_FULL_GROUP_BY 报错的解决方法的文章就介绍到这了,更多相关 Mysql5.7 ONLY_FULL_GROUP_BY

Ursachenanalyse: In der MySQL5.7-Version ist das Attribut mysql sql_mode = only_full_group_by standardmäßig festgelegt, was einen Fehler verursacht.

Unter diesen ist ONLY_FULL_GROUP_BY der Übeltäter dieses Fehlers. In diesem strengen Modus gilt für die Aggregationsoperation group by, wenn in select Spalten in nicht in group by erscheinen, dann ist dieses SQL illegal. Denn in der vom Entwickler geschriebenen sql befindet sich die Spalte select nicht in der group by-Klausel, wenn group by verwendet wird. Code> Einen Fehler melden. <p></p>Die Testumgebung hat die neueste Version von <code>mysql5.7.x heruntergeladen und installiert. Der only_full_group_by-Modus ist standardmäßig aktiviert.

1. Überprüfen Sie sql_mode

rrreee

Der abgefragte Wert ist:

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_C REATE_US ER,NO_ENGINE_SUBSTITUTION

2. Entfernen Sie ONLY_FULL_GROUP_BY und setzen Sie den Wert zurück .

rrreee

3. Das Obige ändert den globalen sql_mode, der für die neu erstellte Datenbank gültig ist.

Für vorhandene Datenbanken müssen Sie sie unter den entsprechenden Daten ausführen

rrreeeDie obige Methode ist nach dem Neustart der MySQL-Datenbank immer noch ungültig und die folgende Methode ist nach dem Neustart immer noch wirksam

🎜Suchen Sie die Konfiguration von MySQL-Datei, in der Datei /etc/my.cnf auf dem linux-System, fragen Sie das Feld sql_mode ab Ich habe dieses Schlüsselwort nicht in der Konfigurationsdatei gefunden, daher habe ich es manuell hinzugefügt: 🎜rrreee🎜Zu beachten ist, dass es in der [mysqld]-Konfiguration hinzugefügt werden muss, sodass nach dem Hinzufügen ein Neustart durchgeführt werden muss mysql wird wirksam und beendet die Datenbank: Beenden, Neustartbefehl: 🎜rrreee🎜 Aktualisieren Sie die Seite und die Fehlermeldung verschwindet und wird erfolgreich behoben. Stellen Sie erneut eine Verbindung zur Datenbank her, um sql_mode anzuzeigen. code>. Konfigurieren Sie <code>select @@sql_mode: 🎜
🎜STRICT_TRANS_TABLES . Das ist alles, mehr verwandte Mysql5.7 ONLY_FULL_GROUP_BY🎜🎜🎜Das Folgende sind die Bedeutungen allgemeiner Werte ​​​​von sql_mode, Referenz: 🎜🎜🎜ONLY_FULL_GROUP_BY: Wenn bei GROUP BY-Aggregationsoperationen die Spalte in SELECT nicht in GROUP BY angezeigt wird, ist diese SQL ungültig, da sich die Spalte nicht in der GROUP BY-Klausel befindet🎜 🎜NO_AUTO_VALUE_ON_ZERO: Dieser Wert beeinflusst das Einfügen automatisch vergrößernder Spalten. In den Standardeinstellungen bedeutet das Einfügen von 0 oder NULL, dass der nächste automatisch steigende Wert generiert wird. Diese Option ist nützlich, wenn der Benutzer einen Wert von 0 einfügen möchte und die Spalte automatisch vergrößert wird. 🎜🎜STRICT_TRANS_TABLES: Wenn in diesem Modus ein Wert nicht in eine Transaktionstabelle eingefügt werden kann, wird der aktuelle Vorgang unterbrochen und es gibt keine Begrenzung für Nicht-Transaktionstabellen. 🎜🎜NO_ZERO_IN_DATE: Im strikten Modus gelten Datums- und Monatsangaben Darf nicht Null sein🎜 🎜NO_ZERO_DATE: Legen Sie diesen Wert fest. Die MySQL-Datenbank lässt das Einfügen von Nulldaten nicht zu. 🎜🎜ERROR_FOR_DIVISION_BY_ZERO: Wenn die Daten beim INSERT oder UPDATE durch Null dividiert werden, wird anstelle einer Warnung ein Fehler generiert. Wenn der Modus nicht angegeben ist, gibt MySQL NULL zurück, wenn die Daten durch Null geteilt werden. 🎜🎜NO_AUTO_CREATE_USER: Verhindert, dass GRANT Benutzer mit leeren Passwörtern erstellt. 🎜🎜NO_ENGINE_SUBSTITUTION: Löst einen Fehler aus, wenn die erforderliche Speicher-Engine deaktiviert oder nicht kompiliert ist. Wenn dieser Wert nicht festgelegt ist, wird stattdessen die Standardspeicher-Engine verwendet und eine Ausnahme ausgelöst. 🎜🎜PIPES_AS_CONCAT: Behandeln Sie „||“ als String-Verbindungsoperator. Dies ist dasselbe wie bei der Oracle-Datenbank zur String-Verkettungsfunktion Concat🎜🎜ANSI_QUOTES: Nach der Aktivierung von ANSI_QUOTES können keine doppelten Anführungszeichen verwendet werden, um den String in Anführungszeichen zu setzen, da er als Bezeichner interpretiert wird. 🎜🎜Empfohlenes Lernen: „🎜MySQL-Video-Tutorial🎜“🎜🎜

Das obige ist der detaillierte Inhalt vonEin Artikel, der das Fehlerberichterstattungsproblem der MySQL-Einstellung only_full_group_by ausführlich erläutert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHPs Fähigkeiten zur Verarbeitung von Big-Data-Strukturen PHPs Fähigkeiten zur Verarbeitung von Big-Data-Strukturen May 08, 2024 am 10:24 AM

Fähigkeiten zur Verarbeitung von Big-Data-Strukturen: Chunking: Teilen Sie den Datensatz auf und verarbeiten Sie ihn in Blöcken, um den Speicherverbrauch zu reduzieren. Generator: Generieren Sie Datenelemente einzeln, ohne den gesamten Datensatz zu laden, geeignet für unbegrenzte Datensätze. Streaming: Lesen Sie Dateien oder fragen Sie Ergebnisse Zeile für Zeile ab, geeignet für große Dateien oder Remote-Daten. Externer Speicher: Speichern Sie die Daten bei sehr großen Datensätzen in einer Datenbank oder NoSQL.

Wie optimiert man die MySQL-Abfrageleistung in PHP? Wie optimiert man die MySQL-Abfrageleistung in PHP? Jun 03, 2024 pm 08:11 PM

Die MySQL-Abfrageleistung kann durch die Erstellung von Indizes optimiert werden, die die Suchzeit von linearer Komplexität auf logarithmische Komplexität reduzieren. Verwenden Sie PreparedStatements, um SQL-Injection zu verhindern und die Abfrageleistung zu verbessern. Begrenzen Sie die Abfrageergebnisse und reduzieren Sie die vom Server verarbeitete Datenmenge. Optimieren Sie Join-Abfragen, einschließlich der Verwendung geeigneter Join-Typen, der Erstellung von Indizes und der Berücksichtigung der Verwendung von Unterabfragen. Analysieren Sie Abfragen, um Engpässe zu identifizieren. Verwenden Sie Caching, um die Datenbanklast zu reduzieren. Optimieren Sie den PHP-Code, um den Overhead zu minimieren.

Wie verwende ich MySQL-Backup und -Wiederherstellung in PHP? Wie verwende ich MySQL-Backup und -Wiederherstellung in PHP? Jun 03, 2024 pm 12:19 PM

Das Sichern und Wiederherstellen einer MySQL-Datenbank in PHP kann durch Befolgen dieser Schritte erreicht werden: Sichern Sie die Datenbank: Verwenden Sie den Befehl mysqldump, um die Datenbank in eine SQL-Datei zu sichern. Datenbank wiederherstellen: Verwenden Sie den Befehl mysql, um die Datenbank aus SQL-Dateien wiederherzustellen.

Wie füge ich mit PHP Daten in eine MySQL-Tabelle ein? Wie füge ich mit PHP Daten in eine MySQL-Tabelle ein? Jun 02, 2024 pm 02:26 PM

Wie füge ich Daten in eine MySQL-Tabelle ein? Mit der Datenbank verbinden: Stellen Sie mit mysqli eine Verbindung zur Datenbank her. Bereiten Sie die SQL-Abfrage vor: Schreiben Sie eine INSERT-Anweisung, um die einzufügenden Spalten und Werte anzugeben. Abfrage ausführen: Verwenden Sie die Methode query(), um die Einfügungsabfrage auszuführen. Bei Erfolg wird eine Bestätigungsmeldung ausgegeben.

So beheben Sie den Fehler „mysql_native_password nicht geladen' unter MySQL 8.4 So beheben Sie den Fehler „mysql_native_password nicht geladen' unter MySQL 8.4 Dec 09, 2024 am 11:42 AM

Eine der wichtigsten Änderungen, die in MySQL 8.4 (der neuesten LTS-Version von 2024) eingeführt wurden, besteht darin, dass das Plugin „MySQL Native Password“ nicht mehr standardmäßig aktiviert ist. Darüber hinaus entfernt MySQL 9.0 dieses Plugin vollständig. Diese Änderung betrifft PHP und andere Apps

Wie verwende ich gespeicherte MySQL-Prozeduren in PHP? Wie verwende ich gespeicherte MySQL-Prozeduren in PHP? Jun 02, 2024 pm 02:13 PM

So verwenden Sie gespeicherte MySQL-Prozeduren in PHP: Verwenden Sie PDO oder die MySQLi-Erweiterung, um eine Verbindung zu einer MySQL-Datenbank herzustellen. Bereiten Sie die Anweisung zum Aufrufen der gespeicherten Prozedur vor. Führen Sie die gespeicherte Prozedur aus. Verarbeiten Sie die Ergebnismenge (wenn die gespeicherte Prozedur Ergebnisse zurückgibt). Schließen Sie die Datenbankverbindung.

Wie erstelle ich eine MySQL-Tabelle mit PHP? Wie erstelle ich eine MySQL-Tabelle mit PHP? Jun 04, 2024 pm 01:57 PM

Das Erstellen einer MySQL-Tabelle mit PHP erfordert die folgenden Schritte: Stellen Sie eine Verbindung zur Datenbank her. Erstellen Sie die Datenbank, falls sie nicht vorhanden ist. Wählen Sie eine Datenbank aus. Tabelle erstellen. Führen Sie die Abfrage aus. Schließen Sie die Verbindung.

Der Unterschied zwischen Oracle-Datenbank und MySQL Der Unterschied zwischen Oracle-Datenbank und MySQL May 10, 2024 am 01:54 AM

Oracle-Datenbank und MySQL sind beide Datenbanken, die auf dem relationalen Modell basieren, aber Oracle ist in Bezug auf Kompatibilität, Skalierbarkeit, Datentypen und Sicherheit überlegen, während MySQL auf Geschwindigkeit und Flexibilität setzt und eher für kleine bis mittlere Datensätze geeignet ist. ① Oracle bietet eine breite Palette von Datentypen, ② bietet erweiterte Sicherheitsfunktionen, ③ ist für Anwendungen auf Unternehmensebene geeignet; ① MySQL unterstützt NoSQL-Datentypen, ② verfügt über weniger Sicherheitsmaßnahmen und ③ ist für kleine bis mittlere Anwendungen geeignet.

See all articles