web-dev-qa-db-de.com

Maximale Länge von MySQL und GROUP_CONCAT ()

Ich verwende GROUP_CONCAT() in einer MySQL-Abfrage, um mehrere Zeilen in eine einzelne Zeichenfolge zu konvertieren. Die maximale Länge des Ergebnisses dieser Funktion ist jedoch 1024 Figuren.

Mir ist sehr wohl bewusst, dass ich den Parameter group_concat_max_len um dieses Limit zu erhöhen:

SET SESSION group_concat_max_len = 1000000;

Auf dem von mir verwendeten Server kann ich jedoch keine Parameter ändern. Nicht mithilfe der vorherigen Abfrage und nicht durch Bearbeiten einer Konfigurationsdatei.

Meine Frage lautet also: Gibt es eine andere Möglichkeit, die Ausgabe einer mehrzeiligen Abfrage in eine einzelne Zeichenfolge zu konvertieren?

234
ZeWaren
CREATE TABLE some_table (
  field1 int(11) NOT NULL AUTO_INCREMENT,
  field2 varchar(10) NOT NULL,
  field3 varchar(10) NOT NULL,
  PRIMARY KEY (`field1`)
);

INSERT INTO `some_table` (field1, field2, field3) VALUES
(1, 'text one', 'foo'),
(2, 'text two', 'bar'),
(3, 'text three', 'data'),
(4, 'text four', 'magic');

Diese Abfrage ist etwas seltsam, benötigt jedoch keine weitere Abfrage, um die Variable zu initialisieren. und es kann in eine komplexere Abfrage eingebettet werden. Es werden alle 'field2' zurückgegeben, die durch ein Semikolon getrennt sind.

SELECT result
FROM   (SELECT @result := '',
               (SELECT result
                FROM   (SELECT @result := CONCAT_WS(';', @result, field2) AS result,
                               LENGTH(@result)                            AS blength
                        FROM   some_table
                        ORDER  BY blength DESC
                        LIMIT  1) AS sub1) AS result) AS sub2; 
2
ZeWaren
SET SESSION group_concat_max_len = 1000000;

ist eine temporäre Einstellung für den Sitzungsbereich. Dies gilt nur für die aktuelle Sitzung. Sie sollten es so verwenden.

SET SESSION group_concat_max_len = 1000000;
select group_concat(column) from table group by column

Sie können dies auch beim Freigeben von Hosting tun. Wenn Sie jedoch eine andere Sitzung verwenden, müssen Sie den Befehl SET SESSION Wiederholen.

319
keatkeat

Der richtige Parameter zum Einstellen der maximalen Länge ist:

SET @@group_concat_max_len = value_numeric;

value_numeric muss> 1024 sein; standardmäßig das group_concat_max_len Wert ist 1024.

55
oscar

Fügen Sie diese Einstellung in die Konfigurationsdatei xampp my.ini ein:

[mysqld]
group_concat_max_len = 1000000

Starten Sie dann xampp mysql neu

Sie können dies versuchen

SET GLOBAL group_concat_max_len = 1000000;
7

Die korrekte Syntax lautet mysql> SET @@global.group_concat_max_len = integer;
Wenn Sie auf dem Server, auf dem sich Ihre Datenbank befindet, nicht über die entsprechenden Berechtigungen verfügen, verwenden Sie eine Abfrage wie die folgende:
mySQL = "SET @@session.group_concat_max_len = 10000;" oder ein anderer Wert.
Nächste Zeile:
SET objRS = objConn.Execute(mySQL) Ihre Variablen können unterschiedlich sein.
dann
mySQL="SELECT GROUP_CONCAT(......);" etc
Ich verwende die letzte Version, da ich nicht die Berechtigung habe, den Standardwert von 1024 global zu ändern (mit cPanel).
Hoffe das hilft.

5
Ola Balstad