Wie stelle ich sql_mode=only_full_group_by ein?

Günther Weber

Benutzer
Beiträge
8
Hallo,

Nachdem ich auf meinem lokalen Webserver unter Windows 11 mit MariaDB immer Probleme hatte, habe ich den MySQL Server Version 8.3.0 als Windows-Dienst installiert. Bei Abfragen einer bestimmten Tabelle kommt nun diese Fehlermeldung:

Code:
mysqli_sql_exception: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'db.tabelle.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by PHP-Datei on line xyz

Dieses Feld "id" ist ein AUTO_INCREMENT Integer Primärindex. Mache ich die Abfrage in HeidiSQL, kommt keine Fehlermeldung. Die Tabelle habe ich frisch vom Webserver exportiert und lokal importiert. Auf dem Webserver der Firma läuft 10.11.4-MariaDB-1:10.11.4+maria~deb11-log, dort gibt es keine Probleme.

Was hat es mit diesem sql_mode=only_full_group_by auf sich, wie stelle ich das richtig ein?

PHPmyAdmin geht nicht, weil der auf die XAMPP / MariaDB Dateien zugreift und da ist kein Passwort für den neuen Datenbank-Zugriff hinterlegt.
Danke - Günther
 
Werbung:
Was hat es mit diesem sql_mode=only_full_group_by auf sich, wie stelle ich das richtig ein?
Es sorgt dafür, dass sie MySQL Standard konform und konsistent verhält.

Kurz gesagt: in einer Abfrage die GROUP BY verwendet, müssen alle Spalten in der SELECT Liste entweder Teil der Spalten des GROUP BY sein, oder in einer Aggregatsfunktion verwendet werden.

Es wundert mich aber, dass du unter MariaDB keine Fehlermeldung bekommst, ich dachte dort wäre das auch die Standardeinstellung.
 
Bezogen auf meine Aussage mit HeidiSQL: Da habe ich aus Faulheit das GROUP BY weggelassen.
Mit GROUP BY bekomme ich die Meldung auch in HeidiSQL.

Kurz gesagt: in einer Abfrage die GROUP BY verwendet, müssen alle Spalten in der SELECT Liste entweder Teil der Spalten des GROUP BY sein, oder in einer Aggregatsfunktion verwendet werden.

Die Abfrage beginnt mit SELECT *, also sollte das doch erfüllt sein.

Also Standard wäre, dass ich den Fehler bekomme? Auf der Internet Datenbank sind aber keine speziellen Einstellungen festgelegt, und früher mit dem lokalen MariaDB habe ich auch nie etwas am Standard geändert.

Wo finde ich denn nun meine Einstellungen unter Windows?

Danke - Günther
 
Die Abfrage beginnt mit SELECT *, also sollte das doch erfüllt sein.
Genau dann eben nicht. Es sei denn Du hast dann auch alle Spalten im GROUP BY - was aber letztendlich nichts anderes als ein DISTINCT ist, was aber nicht viel Sinn macht wenn die Spalten des Primärschlüssel dabei sind, denn dann gibt es ja keine Duplikate
Also Standard wäre, dass ich den Fehler bekomme?
Ja
Wo finde ich denn nun meine Einstellungen unter Windows?
Du musst die my.ini (oder my.cnf, weiß grad nicht wie das unter Windows heißt) bearbeiten und die Einstellung ändern.
 
Alles klar, danke für die Hilfe. Ich habe unten unter ähnliche Themen nachgelesen und bin bei der Aussage, das Programm des Fragestellers müsse
sein, und habe mir meine Abfrage noch einmal etwas genauer angeschaut.
Also, mein GROUP BY war anfangs vielleicht mal richtig, aber inzwischen ist es wirklich grosser Mist.

Danke - Günther
 
Werbung:
Zurück
Oben