限制mysql查询列中的字符

时间:2013-11-02 15:44:09

标签: mysql character limit

我的查询有问题

SELECT usuarios.UsuarioId, usuarios.UsuarioNombre, 
usuarios.UsuarioFechaRegistro, usuarios.UsuarioFecha, 
usuarios.UsuarioCompartir, usuarios.UsuarioPrivacidad, 
usuarios.UsuarioAvatar, usuarios.PlataformaDefecto, 
GROUP_CONCAT( DISTINCT usuarios_plataformas.PlataformaId) as Plataformas, 
CONCAT('[', GROUP_CONCAT( 
DISTINCT CASE WHEN follows.UsuariosSiguiendo = usuarios.UsuarioId 
THEN (SELECT CONCAT('{"UsuarioNombre":"', usuarios.UsuarioNombre, '", "UsuarioId":"', usuarios.UsuarioId, '"}') 
FROM usuarios 
WHERE UsuarioId = follows.UsuariosSeguido) END), ']') as Siguiendo, 
CONCAT('[', GROUP_CONCAT( 
DISTINCT CASE WHEN follows.UsuariosSeguido = usuarios.UsuarioId 
THEN (SELECT CONCAT('{"UsuarioNombre":"', usuarios.UsuarioNombre, '", "UsuarioId":"', usuarios.UsuarioId, '"}') 
FROM usuarios 
WHERE UsuarioId = follows.UsuariosSiguiendo) END), ']') as Seguido 
FROM (`usuarios`) 
LEFT JOIN `usuarios_plataformas` ON `usuarios_plataformas`.`UsuarioId` = `usuarios`.`UsuarioId` 
LEFT JOIN `follows` ON `follows`.`UsuariosSiguiendo` = `usuarios`.`UsuarioId` 
OR follows.UsuariosSeguido = usuarios.UsuarioId 
WHERE `UsuarioNombre` = '50l3r' 
GROUP BY `usuarios`.`UsuarioId`

查询会将此结果返回给我:http://gyazo.com/92687af3657239bd7c069ed165c5253c

在我的查询中,我将结果格式化为json。但在“Siguiendo”,“Seguido”栏目中,结果分为极限字符。

非常感谢您的帮助

1 个答案:

答案 0 :(得分:2)

那是因为你正在使用GROUP_CONCAT()并且它对字符串长度有限制,这是由它形成的。这是group_concat_max_len - 因此您应该调整它以适合您的任务。 - 但请注意,在任何情况下都无法克服max unsigned longint(4294967295系统为32-bit18446744073709547520系统为64-bit

您可以通过

动态更改限制
SET [GLOBAL | SESSION] group_concat_max_len = val;

然而,还有另一个更常见的max_allowed_packet限制。它限制了一个数据包或任何生成/中间字符串的最大大小,因此它也应该适合您的问题。