文章目录

  • 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;

mysql将一个字段的值合并再一起用逗号分割_测试数据

2. concat

合并列,多列合并成一列。

SELECT CONCAT(id,':',NAME) FROM test;

mysql将一个字段的值合并再一起用逗号分割_mysql_02

3. concat_ws

指定分隔符,然后将多列合并。

SELECT CONCAT_WS(':',id,NAME) FROM test;

mysql将一个字段的值合并再一起用逗号分割_测试数据_03

4. group_concat

先分组,然后将属于同一分组的合并到同一单元格中。

查询1:就是把concat函数的结果用逗号,合并在了一行

SELECT GROUP_CONCAT(id,':',NAME) FROM test;

mysql将一个字段的值合并再一起用逗号分割_数据库_04

查询2:就是把concat函数的结果做了一个分组合并,也是用逗号隔开

SELECT GROUP_CONCAT(id,':',NAME) FROM test GROUP BY id;

mysql将一个字段的值合并再一起用逗号分割_数据库_05


查询3:在查询1的基础上,添加了换行符\n,想得到以下显示,但事与愿违,因为group_concat函数默认分隔符是逗号,,可以参考查询4。

mysql将一个字段的值合并再一起用逗号分割_mysql_06

# 查询出来的结果有逗号在前面,不好看。
SELECT GROUP_CONCAT(id,':',NAME,'\n') FROM test;

mysql将一个字段的值合并再一起用逗号分割_分隔符_07

查询4:将concat函数得到的结果,合并在一起,分隔符默认是逗号,,可以使用SEPARATOR修改分隔符,如修改成换行符\n

SELECT group_CONCAT(id,':',NAME SEPARATOR '\n') FROM test;

mysql将一个字段的值合并再一起用逗号分割_mysql_06

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;

mysql将一个字段的值合并再一起用逗号分割_分隔符_09

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.inimy.conf文件,加上group_concat_max_len=-1或指定长度,修改后要重启mysql数据库服务器。

这里使用方法1做演示:

mysql将一个字段的值合并再一起用逗号分割_字符串_10


可以看到,所有拼接的内容都可以显示出来。

mysql将一个字段的值合并再一起用逗号分割_分隔符_11