我有这个问题:
SELECT DISTINCT(po.mark) franquicia, COUNT(po.id) failures, GROUP_CONCAT(po.log_transaction SEPARATOR ';') logs, DATE(po.created) fecha
FROM pagos_onlines AS po
INNER JOIN usuarios_tokens AS ut ON po.usuario_token = ut.id
WHERE status = 'REJECTED'
AND created > '2017-10-03 11:00:01'
GROUP BY fecha, franquicia;
问题是log_transaction
是表中的BLOB类型,它存储JSON数据,因此字段"记录"应该是一个带有连接JSON的巨大字符串。当我运行此查询时,字段中只出现了一个半JSON" logs",所以我的猜测是该字段的内存空间不足。
在运行MySQL SELECT查询时,有没有办法为特定列动态分配内存?
答案 0 :(得分:1)
此查询几乎肯定会对GROUP_CONCAT
删除的数据发出警告。如果您使用忽略警告的客户端或库,则可以在运行查询后立即运行查询SHOW WARNINGS;
,并确认此警告存在。
要解决此问题,您需要增加系统变量@@GROUP_CONCAT_MAX_LEN
的值,以便在不截断的情况下获得更长的结果。
默认值仅为1024(字节,而不是字符,根据文档)。您可以在全局配置中更改此设置,也可以在运行此查询之前在会话中更改它。
答案 1 :(得分:0)
BLOB或TEXT对象的最大大小由其类型决定, 但实际上你可以在客户和客户之间传输的最大值 服务器由可用内存量和大小决定 通讯缓冲区。您可以通过更改消息缓冲区大小 更改max_allowed_packet变量的值,但您必须这样做 所以对于服务器和客户端程序都是如此。
您更改选项 max_allowed_packet 的值。