解决group_concat in长度限制

解决group_concat长度限制

在mysql中,有个函数叫“group_concat”,平常使用可能发现不了问题,在处理大数据的时候,会发现内容被截取了。其实MYSQL内部对这个是有设置的,默认不设置的长度是1024。查看默认配置

show variables like "group_concat_max_len"; 

如果是生产环境下,不能擅自重启MySQL服务,则可以通过语句设置group_concat的作用范围,如:

SET GLOBAL group_concat_max_len=-1;
SET SESSION group_concat_max_len=-1;

group_concat_max_len = -1  (-1为最大值或根据实际需求设置长度)或执行sql

SET SESSION group_concat_max_len = 10240000;

group_concat()指定分隔符

GROUP_CONCAT(age SEPARATOR '|')

解决in长度限制

MySQL中IN语句的上限是多少?实际上,这个上限并没有明确的限制但是在实践中,由于查询中的项目数量受到SQL语句的总长度限制,以及服务器变量max_allowed_packet的限制,可能会受到实际的限制。如果你需要处理大量数据,可能需要增加这个参数max_allowed_packet的值。

-- 假设我们有一个非常长的IN列表
-- 首先,我们将这个列表拆分成小的部分
 
-- 创建临时表
CREATE TEMPORARY TABLE temp_ids (id_list INT);
 
-- 插入第一部分ID
INSERT INTO temp_ids (id_list) VALUES (1), (2), (3), ..., (1000);
 
-- 使用子查询来从临时表中选择数据
SELECT *
FROM your_table
WHERE your_column IN (SELECT id_list FROM temp_ids);
 
-- 清理临时表
DROP TEMPORARY TABLE IF EXISTS temp_ids;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值