MySQL - GROUP_CONCAT(expr)
Publicado em: 19/07/2020 16:59 - Atualizado em: 19/07/2020 17:02

A alguns dias atrás, precisei implementar, utilizando SQL (MySQL), uma solução onde era exibido em tela uma conta bancária com seu saldo e seus lançamentos futuros. O saldo já era calculado previamente no banco, e os lançamentos futuros, resolvi agrupá-los via SQL em uma string JSON com a função GROUP_CONCAT(expr).

Já que os registros necessários já eram retornados, não havia necessidade de prejudicar a performance com uma sub-query ou algum join mirabolante. Bastava comparar as datas para saber quais registros exibir como lançamento futuro.

Tudo funcionava bem e a coluna lancamentos_futuros retornava perfeitamente os campos e valores, até que em uma ocasião, houveram muitos registros de lançamentos futuros. A string JSON passou a ser interrompida de maneira que "quebrava" a estrutura/sintaxe JSON, me retornando um erro http 500.

Foi então que a documentção do MySQL me ajudou indicando o caminho:

"...The result is truncated to the maximum length that is given by the group_concat_max_len system variable, which has a default value of 1024".

Para que possa permitir mais de 1024 caracteres nessa função de agrupamento, deve configurar as seguintes variáveis do MySQL:

  1. group_concat_max_len (Tamanho máximo da string em caracteres permitido pela função)
  2. max_allowed_packet (é o tamanho máximo, em bytes, que o buffer pode atingir), é recomendado aumentar caso sejam utilizados campos muito longos, ou do tipo BLOB.

Bom, no meu caso, foram esses os problemas ocorridos. Espero ter ajudado! 

Grande abraço, e até o próximo post.

arrow_back