文章目录
- MYSQL-合并字符串的三大函数(concat、concat_ws、group_concat)及解决因使用group_concat函数合并字符串后被截断(显示不全)的问题
- 1. 创建测试数据
- 2. concat
- 3. concat_ws
- 4. group_concat
- 5. 解决因使用group_concat函数合并字符串后被截断(显示不全)的问题
- 5.1 创建测试数据
- 5.2 发现问题
- 5.3 解决问题
MYSQL-合并字符串的三大函数(concat、concat_ws、group_concat)及解决因使用group_concat函数合并字符串后被截断(显示不全)的问题
1. 创建测试数据
drop table test;
create table `test` (
`name` varchar (30),
`id` int (11)
);
insert into `test` (`name`, `id`) values('xixi','1');
insert into `test` (`name`, `id`) values('haha','2');
insert into `test` (`name`, `id`) values('lala','3');
insert into `test` (`name`, `id`) values('hehe','4');
insert into `test` (`name`, `id`) values('abab','2');
insert into `test` (`name`, `id`) values('xyxy','3');
insert into `test` (`name`, `id`) values('xyxy','3');
SELECT id,NAME FROM test;
2. concat
合并列,多列合并成一列。
SELECT CONCAT(id,':',NAME) FROM test;
3. concat_ws
指定分隔符,然后将多列合并。
SELECT CONCAT_WS(':',id,NAME) FROM test;
4. group_concat
先分组,然后将属于同一分组的合并到同一单元格中。
查询1:就是把concat函数的结果用逗号,合并在了一行
SELECT GROUP_CONCAT(id,':',NAME) FROM test;
查询2:就是把concat函数的结果做了一个分组合并,也是用逗号隔开
SELECT GROUP_CONCAT(id,':',NAME) FROM test GROUP BY id;
查询3:在查询1的基础上,添加了换行符\n
,想得到以下显示,但事与愿违,因为group_concat函数默认分隔符是逗号,
,可以参考查询4。
# 查询出来的结果有逗号在前面,不好看。
SELECT GROUP_CONCAT(id,':',NAME,'\n') FROM test;
查询4:将concat函数得到的结果,合并在一起,分隔符默认是逗号,
,可以使用SEPARATOR
修改分隔符,如修改成换行符\n
SELECT group_CONCAT(id,':',NAME SEPARATOR '\n') FROM test;
5. 解决因使用group_concat函数合并字符串后被截断(显示不全)的问题
5.1 创建测试数据
create table `test` (
`id` int (11),
`name` varchar (3000)
);
insert into `test` (`id`, `name`) values('1','有一天,兔子碰见了乌龟,兔子骄傲地说:“走路慢吞吞的老乌龟咱们明天比赛跑吧!”“行。”乌龟谦虚地说。');
insert into `test` (`id`, `name`) values('2','第二天,兔子请来了大象当裁判,裁判旁边是观众,观众有小猴、小鸡、小鸭、小猫等一些小动物。“预备,跑!”裁判响亮地说。比赛已经开始了,话音刚落,兔子像子弹一样飞快的向前跑去,一会儿就没影了。乌龟慢吞吞的却刚走一米。');
insert into `test` (`id`, `name`) values('3','过了一会儿,兔子躺在了一处草地里,心里想:要按照这样的速度乌龟猴年马月才能达到终点。然后,兔子就睡起了大觉,在梦中它梦见了它自己登上了领奖台,得了第一名。这时候乌龟心里想:我虽然会输给兔子,但我只要尽力了就行。于是乌龟不管劳累还继续爬呀爬呀爬……');
insert into `test` (`id`, `name`) values('4','两个小时后,乌龟终于到达了终点,心里想:兔子跑得那么快,我肯定最后一名。没想到大象裁判告诉它:你得了第一名。大家都在为乌龟欢呼。但大家又非常奇怪:“兔子去哪了?怎么没拿第一?”于是大家焦急地沿着比赛路线寻找兔子,它们千呼万唤,找啊,找啊,终于在草坪上找到了正在鼾睡的兔子,大象裁判大声地对兔子说道:“快起床,乌龟得第一啦!”兔子惊讶地说道:“不……不……不会吧!”大象肯定地说道:“没错,乌龟就是得了第一。”');
5.2 发现问题
SELECT GROUP_CONCAT(id,':',NAME SEPARATOR '\n') FROM test;
5.3 解决问题
原因:GROUP_CONCAT(id,':',NAME SEPARATOR '\n')
拼接字符串后长度超出默认长度1024。
# 可以看到group_concat_max_len的值为1024
SHOW VARIABLES LIKE '%group_concat%';
方法1:临时修改group_concat_max_len
的值
set group_concat_max_len = 99999;
show variables like '%group_con%';
方法2:永久修改,要找到my.ini
或my.conf
文件,加上group_concat_max_len=-1或指定长度
,修改后要重启mysql数据库服务器。
这里使用方法1做演示:
可以看到,所有拼接的内容都可以显示出来。