`

mysql中concat 和 group_concat的陷阱

 
阅读更多

1.int字段的连接陷阱

当你用group_concat的时候请注意,连接起来的字段如果是int型,一定要转换成char再拼起来,
否则在你执行后(ExecuteScalar或者其它任何执行SQL返回结果的方法)返回的将不是一个逗号隔开的串,
而是byte[]。

该问题当你在SQLyog等一些工具中是体现不出来的,所以很难发现。

select group_concat(ipaddress) from t_ip 返回逗号隔开的串
select group_concat(id) from t_ip 返回byte[]
select group_concat(CAST(id as char)) from t_dep 返回逗号隔开的串
select group_concat(Convert(id , char)) from t_dep 返回逗号隔开的串

附Cast,convert的用法:
CAST(expr AS type), CONVERT(expr,type) , CONVERT(expr USING transcoding_name)
CAST() 和CONVERT() 函数可用来获取一个类型的值,并产生另一个类型的值。

这个类型 可以是以下值其中的 一个:

BINARY[(N)]
CHAR[(N)]
DATE
DATETIME
DECIMAL
SIGNED [INTEGER]
TIME
UNSIGNED [INTEGER]

2.长度陷阱
用group_concat连接字段的时候是有长度限制的,并不是有多少连多少。但你可以设置一下。

使用group_concat_max_len系统变量,你可以设置允许的最大长度。
程序中进行这项操作的语法如下,其中 val 是一个无符号整数:
SET [SESSION | GLOBAL] group_concat_max_len = val;
若已经设置了最大长度, 则结果被截至这个最大长度。

在SQLyog中执行 SET GLOBAL group_concat_max_len = 10 后,重新打开SQLyog,设置就会生效。

请注意,这种方式只是临时的,如要长久的修改,则需要修改mysql的配置节。

到my.cnf的mysqld节点下加上group_concat_max_len =99999……

重启mysql。

concat:

用来连接字段,或者字符。但是只要被连接的字段中有一个值为null,则concat得到的就是null。

这是个非常危险的玩意。我相信用concat连接多个字段的人想要的结果多半不是这样:

concat(A,B),如果B为null,那么concat(A,B)=null

我们想要的是这样的:

连接A,B,如果B为null,那么连接后应该是A。

这时应该用CONCAT_WS(separator, str1, str2,…)

分享到:
评论

相关推荐

    【GROUP_CONCAT】使用之MySQL官方文档翻译

    `GROUP_CONCAT` 结果的长度受到 `group_concat_max_len` 系统变量的限制,默认值为 1024 字节。如果结果超过了这个长度,将会被截断。可以通过以下语句动态调整这个值: ```sql SET SESSION group_concat_max_...

    如何修改Mysql中group_concat的长度限制

    为了解决这个问题,你需要调整MySQL的`group_concat_max_len`系统变量。 `group_concat_max_len`变量决定了`GROUP_CONCAT`函数返回的最大长度。你可以通过以下两种方式来修改这个限制: 1. **临时修改(仅限当前...

    MySQL GROUP_CONCAT限制解决方案

    作用:  GROUP_CONCAT函数可以拼接某个字段值成字符串,默认的分隔符是 逗号,即...SHOW VARIABLES LIKE 'group_concat_max_len' 操作方法:(如图) 调整长度设置方法: (1)在MySQL配置文件中加入:  文件:my.ini

    Mysql的GROUP_CONCAT()函数使用方法

    MySQL中的GROUP_CONCAT()函数是一个非常实用的聚合函数,它允许你在分组查询时将同一组内的多个值合并成一个字符串。此函数主要用于数据分析和报表生成,尤其在处理多对多关系的数据时,能简化数据处理流程。在本文...

    MySQL统计函数GROUP_CONCAT使用陷阱分析

    1. 修改MySQL配置文件(如`my.cnf`或`my.ini`),在[mysqld]段中添加一行`group_concat_max_len = 102400`,并重新启动MySQL服务。这样可以全局地增加`GROUP_CONCAT`的最大长度限制。 2. 如果你不希望修改配置文件...

    MySQL中group_concat函数深入理解

    MySQL中的`GROUP_CONCAT`函数是一个非常实用的聚合函数,它允许你在分组查询中将一组行的某个列值合并成一个字符串,每个值之间由指定的分隔符隔开。这个函数对于数据汇总和报告生成特别有用,因为它可以把多行数据...

    Mysql5.7中使用group concat函数数据被截断的问题完美解决方法

    总结来说,当在MySQL 5.7中遇到`GROUP_CONCAT`函数数据被截断的问题时,关键在于调整`group_concat_max_len`变量的值。根据需求,可以选择修改配置文件或通过SQL命令临时调整该值。正确设置后,可以确保`GROUP_...

    mysql中GROUP_CONCAT的使用方法实例分析

    - `GROUP_CONCAT`默认返回的字符串长度有限制,可以通过设置`group_concat_max_len`系统变量来调整这个限制。 - `GROUP_CONCAT`中的`SEPARATOR`关键字用于指定各个元素之间的分隔符,如果不指定,默认使用逗号 `,`。...

    mysql group_concat()函数用法总结

    MySQL中的`GROUP_CONCAT()`函数是一个非常实用的聚合函数...不过,合理地使用`GROUP BY`子句和理解`group_concat_max_len`的限制对于正确运用这个函数至关重要。在设计查询时,务必考虑这些因素以确保得到期望的结果。

    SqlServer GroupConcat

    `SqlServer GroupConcat`的CLR实现是为了解决SQL Server中缺乏类似MySQL `GROUP_CONCAT`功能的问题。CLR(Common Language Runtime)是.NET框架的一部分,允许开发者使用各种编程语言(如C#、VB.NET等)编写存储过程...

    浅谈MySQL中group_concat()函数的排序方法

    总的来说,`GROUP_CONCAT()` 函数是MySQL中处理聚合数据的一个强大工具,结合 `ORDER BY` 子句,可以实现对合并后的值进行排序,进一步提升数据的可读性和分析效率。在进行复杂数据整理和分析时,熟练掌握这一功能将...

    详解MySQL中concat函数的用法(连接字符串)

    总结来说,MySQL中的`CONCAT`、`CONCAT_WS`和`GROUP_CONCAT`函数提供了强大的字符串处理能力,允许你灵活地连接和组合字符串,以满足不同的查询需求。在处理大量文本数据时,这些函数是数据库查询中不可或缺的一部分...

    MySQL拼接字符串函数GROUP_CONCAT详解

    MySQL中的GROUP_CONCAT函数是一个非常实用的聚合函数,主要用于在分组查询中将同一组内的多个值合并为一个字符串,通常用于数据汇总和报告。它能够处理非NULL值,并且可以进行排序、去重和自定义分隔符,极大地提高...

    group_concatenate与locate的联合用法示例

    在SQL查询中,`GROUP_CONCAT` 和 `LOCATE` 是两个非常实用的函数,它们分别用于处理分组数据的聚合和字符串定位。本篇文章将详细介绍这两个函数的用途以及它们如何联合使用,以帮助你更好地理解和应用在实际的数据库...

    mysql group_concat 实现把分组字段写成一行的方法示例

    - MySQL对`GROUP_CONCAT` 输出的长度有限制,可以通过修改`group_concat_max_len`系统变量来扩展最大长度。 - 如果不指定`ORDER BY`子句,`GROUP_CONCAT` 按照字段的默认排序顺序连接字段值。 - 使用`DISTINCT`可以...

Global site tag (gtag.js) - Google Analytics