GROUP_CONCAT () Zeilenanzahl beim Gruppieren nach einem Textfeld

8
%Vor%

Beim Ausführen einer GROUP BY -Abfrage ohne Verwendung von GROUP_CONCAT() ist die Ergebnismenge wie erwartet (zeigt zwei Zeilen, eine für jede Variation von text ):

%Vor%

Wenn jedoch dieselbe Abfrage mit einem GROUP_CONCAT() ausgeführt wird, ist die Ergebnismenge nicht wie erwartet (zeigt eine Zeile mit einer verketteten Zeichenfolge der beiden id -Felder):

%Vor%

Meine Frage:

Warum sollte GROUP_CONCAT() die Anzahl der zurückgegebenen Zeilen beeinflussen?

Meine anfängliche Annahme war, dass GROUP_CONCAT_MAX_LEN etwas damit zu tun hat (meins ist auf 1024 gesetzt), aber das betrifft sicherlich nur GROUP_CONCAT() , nicht GROUP BY (auch, wie Sie vielleicht bemerken, verwende ich GROUP_CONCAT() für das Feld id , nicht das Feld text , und das Ergebnis davon übersteigt nicht annähernd GROUP_CONCAT_MAX_LEN ).

    
MichaelRushton 12.10.2012, 16:01
quelle

2 Antworten

5

Sie müssen die max_sort_length sessionweise oder global nach Bedarf in eine höhere Nummer ändern. Standardmäßig ist der Wert 1024 Byte und Ihre Zeichenfolge enthält 1170 Bytes Daten. Wenn Sie die Größe erhöhen, erhalten Sie zwei Zeilen für GROUP_CONCAT .

Überprüfen Sie diesen Link max_sort_length

%Vor%

Überprüfen Sie die SQL FIDDLE DEMO

BEARBEITEN: BLOB und TEXT -Werte können nicht zuverlässig in GROUP BY , verwendet werden ORDER BY oder DISTINCT . Nur die ersten max_sort_length Bytes werden beim Vergleich von BLOB-Werten in diesen Fällen verwendet. Der Standardwert von max_sort_length ist 1024 und kann zum Zeitpunkt des Serverstarts oder zur Laufzeit geändert werden.

    
Saharsh Shah 04.01.2013, 11:27
quelle
1

Es sieht so aus, als ob Sie in den MySQL-Standard GROUP_CONCAT_MAX_LEN einsteigen. Ihre Zeichenkette hat eine Länge von 1178, was definitiv über dem Standardwert von 1024 liegt. Das heißt, wenn sich die Werte um etwas später als die 1024 unterscheiden, ignoriert MySQL sie einfach, weil die ersten 1024 Zeichen genau identisch sind. Dies ist ein Limit für das Verhalten von GROUP_CONCAT, nicht für GROUP.

Sie können dies in der my.cnf-Datei für MySQL vergrößern.

Siehe hier für weitere Details:

Ссылка

    
mjuarez 12.10.2012 16:27
quelle