web-dev-qa-db-fra.com

MySQL et GROUP_CONCAT () longueur maximale

J'utilise GROUP_CONCAT() dans une requête MySQL pour convertir plusieurs lignes en une seule chaîne. Cependant, la longueur maximale du résultat de cette fonction est de 1024 caractères.

Je sais très bien que je peux changer le paramètre group_concat_max_len pour augmenter cette limite:

SET SESSION group_concat_max_len = 1000000;

Cependant, sur le serveur que j'utilise, je ne peux changer aucun paramètre. Pas en utilisant la requête précédente et en ne modifiant aucun fichier de configuration.

Ma question est donc la suivante: existe-t-il un autre moyen d’obtenir la sortie d’une requête à plusieurs lignes en une seule chaîne?

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

Cette requête est un peu étrange mais elle n’a pas besoin d’une autre requête pour initialiser la variable; et il peut être incorporé dans une requête plus complexe. Il renvoie tous les champs2 séparés par un point-virgule.

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;

est un paramètre temporaire, session-scope. Cela ne s'applique qu'à la session en cours. Vous devriez l'utiliser comme ceci.

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

Vous pouvez le faire même en partageant un hébergement, mais lorsque vous utilisez une autre session, vous devez répéter la commande SET SESSION.

319
keatkeat

Le paramètre correct pour définir la longueur maximale est:

SET @@group_concat_max_len = value_numeric;

value_numeric doit être> 1024; Par défaut, la valeur group_concat_max_len est 1024.

55
oscar

Incluez ce paramètre dans le fichier de configuration xampp my.ini:

[mysqld]
group_concat_max_len = 1000000

Puis redémarrez xampp mysql

12

Tu peux essayer ça

SET GLOBAL group_concat_max_len = 1000000;
7
Mohamed El Mrabet

La syntaxe correcte est mysql> SET @@global.group_concat_max_len = integer;
Si vous ne disposez pas des privilèges nécessaires pour effectuer cette opération sur le serveur sur lequel réside votre base de données, utilisez une requête telle que:
MySQL = "SET @@session.group_concat_max_len = 10000;"ou une valeur différente.
Ligne suivante:
SET objRS = objConn.Execute(mySQL) vos variables peuvent être différentes.
ensuite
mySQL="SELECT GROUP_CONCAT(......);" etc
J'utilise la dernière version car je ne dispose pas des privilèges nécessaires pour modifier globalement la valeur par défaut de 1024 (à l'aide de cPanel).
J'espère que cela t'aides.

5
Ola Balstad