MySQL 配置 group_concat 函数最大长度

本文将介绍怎样配置 MySQL 的 GROUP_CONCAT 函数(即 group_concat_max_len 配置项)允许的连接字符串的最大长度,默认最大长度为 1024Byte。

在 MySQL 中,GROUP_CONCAT(expr) 函数会从 expr 中连接所有非 NULL 的字符串。如果没有非 NULL 的字符串,那么它就会返回 NULL。语法如下:

GROUP_CONCAT([DISTINCT] expr [,expr ...]
             [ORDER BY {unsigned_integer | col_name | expr}
                 [ASC | DESC] [,col_name ...]]
             [SEPARATOR str_val])

注意:GROUP_CONCAT 函数默认支持拼接的最大长度为 1024Byte 或 1KB。当拼接的长度超过 1024Byte 时,会自动截取掉后面的数据。我们使用 GROUP_CONCAT 时需要特别注意,如果拼接字符串长度超过 1024Byte,字符串被截断,可能会产生程序异常。

实例

我们使用 GROUP_CONCAT 函数去将一张表符合条件的ID拼接成 “1,2,34,5” 这种格式,作为另一个 SQL 语句的 IN 子句的条件。此时,如果字符串被截断为 “1,2,34,”,那么 SQL 语句直接抛错,语法错误。如果字符串被截断为 “1,2,3”,那么 SQL 语句不会出现语法错误,但是程序会出现逻辑错误,这比语法错误更难排查。因此,下面将接收怎样去调整 GROUP_CONCAT 函数的默认最大拼接长度。

MySQL 中,支持两种方式去调整 GROUP_CONCAT 函数拼接的最大长度。分别如下:

方式一:通过命令行

这种方式修改后,仅仅修改内存中的配置,MySQL 服务重启将会失效。将下面命令在 MySQL 控制台执行,如下:

# 1.将 group_concat 最大拼接长度修改为 102400Byte
SET GLOBAL group_concat_max_len = 102400;

# 2.查看 group_concat_max_len 是否被修改成功
show variables like 'group_concat_max_len';

方式二:通过修改配置文件

修改配置文件方式是长久修改,即使重启 MySQL 服务也生效。具体操作如下:

(1)进入 MySQL 的安装目录,找到 my.ini 配置文件,在配置文件最后添加 “group_concat_max_len = 102400” 配置,如下:

# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M 

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 

character_set_server=utf8
lower_case_table_names=1

group_concat_max_len = 102400

(2)重启 MySQL 服务。

(3)使用下面命令验证 group_concat_max_len 的值,如下:

show variables like 'group_concat_max_len';
人永远是要学习的。死的时候,才是毕业的时候。 —— 萧楚女
1 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
其他应用
公众号