MySQL – group_concat(expr)

MySQL
MySQL

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:

  • group_concat_max_len: Tamanho máximo da string em caracteres permitido pela função
  • max_allowed_packet: 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! Até o próximo post!

Referências

Compartilhe

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *