解决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;