mysqlgroup-concatlongtext

mySql SELECT GROUP_CONCAT query not return all data in longtext cell


I have a cell that contains a very long string. If I use this query:

SELECT dettPDE FROM bollaOutDett WHERE idDoc>0 GROUP BY idDoc;

I have no problem, but in some cases I need to use this:

SELECT GROUP_CONCAT(DISTINCT IF(dettPDE='',NULL, dettPDE) SEPARATOR '|') AS dettPDESch 
FROM bollaOutDett 
WHERE idDoc>0 
GROUP BY idDoc;

and in this case dettPDESch not return correctly.

Here the test code:

DROP TABLE IF EXISTS bollaOutDett;
CREATE TABLE bollaOutDett (idDoc int, dettPDE longtext);
INSERT INTO bollaOutDett (idDoc, dettPDE)
VALUES 
    (1, '[{"tab":"PArticoli","id":"3","codProdotto":"2SA1264N","qta":"1","artSer":"1","seriale":"H1","artLot":"0","lotto":""},{"tab":"PArticoli","id":"879","codProdotto":"2SA1267","qta":"1","artSer":"1","seriale":"H2","artLot":"0","lotto":""},{"tab":"PArticoli","id":"879","codProdotto":"2SA1267","qta":"1","artSer":"1","seriale":"H3","artLot":"0","lotto":""},{"tab":"PArticoli","id":"879","codProdotto":"2SA1267","qta":"1","artSer":"1","seriale":"H4","artLot":"0","lotto":""},{"tab":"PArticoli","id":"3","codProdotto":"2SA1264N","qta":"1","artSer":"1","seriale":"J1","artLot":"0","lotto":""}]'),
    (2, ''),
    (3, '[{"tab":"PArticoli","id":"3","codProdotto":"2SA1264N","qta":"1","artSer":"1","seriale":"H1","artLot":"0","lotto":""},{"tab":"PArticoli","id":"879","codProdotto":"2SA1267","qta":"1","artSer":"1","seriale":"H2","artLot":"0","lotto":""},{"tab":"PArticoli","id":"879","codProdotto":"2SA1267","qta":"1","artSer":"1","seriale":"H3","artLot":"0","lotto":""},{"tab":"PArticoli","id":"879","codProdotto":"2SA1267","qta":"1","artSer":"1","seriale":"H4","artLot":"0","lotto":""},{"tab":"PArticoli","id":"3","codProdotto":"2SA1264N","qta":"1","artSer":"1","seriale":"J1","artLot":"0","lotto":""},{"tab":"PArticoli","id":"879","codProdotto":"2SA1267","qta":"1","artSer":"1","seriale":"J2","artLot":"0","lotto":""},{"tab":"PArticoli","id":"879","codProdotto":"2SA1267","qta":"1","artSer":"1","seriale":"J3","artLot":"0","lotto":""},{"tab":"PArticoli","id":"879","codProdotto":"2SA1267","qta":"1","artSer":"1","seriale":"J4","artLot":"0","lotto":""},{"tab":"PArticoli","id":"3","codProdotto":"2SA1264N","qta":"1","artSer":"1","seriale":"K1","artLot":"0","lotto":""},{"tab":"PArticoli","id":"879","codProdotto":"2SA1267","qta":"1","artSer":"1","seriale":"K2","artLot":"0","lotto":""},{"tab":"PArticoli","id":"879","codProdotto":"2SA1267","qta":"1","artSer":"1","seriale":"K3","artLot":"0","lotto":""},{"tab":"PArticoli","id":"879","codProdotto":"2SA1267","qta":"1","artSer":"1","seriale":"K4","artLot":"0","lotto":""}]'),
    (4, '');


SELECT GROUP_CONCAT(DISTINCT IF(dettPDE='',NULL, dettPDE) SEPARATOR '|') AS dettPDESch 
FROM bollaOutDett 
WHERE idDoc>0 
GROUP BY idDoc;

SELECT dettPDE
FROM bollaOutDett 
WHERE idDoc>0 
GROUP BY idDoc

Any suggestion?

Original link to code: here


Solution

  • there is a limit for group_concat length

    Default Value 1024

    you can change this limit using a proper set

    SET SESSION group_concat_max_len = 1000000;
    

    The max limit for

    The maximum value for group_concat_max_len for 64-bit is 18446744073709551615

    The maximum value for group_concat_max_len for 32-bit is 4294967295

    https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_group_concat_max_len