关于Mysql5.6中使用group_concat()函数返回的数据总数不完整的坑
来源:互联网 发布:adobe cs3 mac 破解版 编辑:程序博客网 时间:2024/06/06 04:19
最近项目中需要将数据以","隔开的形式返回,然后使用了group_concat(),整个sql如下
SELECT group_concat(randomnumber ORDER BY randomnumber asc separator ',') as name FROM randomnumber
结果在测试环境中碰到问题,发现返回的数据长度小于实际的长度,真是大坑啊
group_concat()有长度限制1024,在linux 下应该是my.cnf中加上 group_concat_max_len = 2000000 改大就行了。
以下为摘自其他博客的内容
GROUP_CONCAT()是MySQL数据库提供的一个函数,通常跟GROUP BY一起用,具体可参考MySQL官方文挡:http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat。
语法:
GROUP_CONCAT([DISTINCT] expr [,expr ...] [ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC] [,col_name ...]] [SEPARATOR str_val])
1.例如:
SELECT student_id, GROUP_CONCAT(courses_id) AS courses FROM student_courses WHERE student_id=2 GROUP BY student_id;
+------------+---------+
| student_id | courses |
+------------+---------+
| 2 | 3,4,5 |
+------------+---------+
这 就不需要用php循环了
$row = $pdo->query("SELECT student_id, GROUP_CONCAT(courses_id) AS courses FROM student_courses WHERE student_id=2 GROUP BY student_id");
$result = explode(',', $row['courses']);
2.当然分隔符还可以自定义,默认是以“,”作为分隔符,若要改为“|||”,则使用SEPARATOR来指定,例如:
SELECT student_id, GROUP_CONCAT(courses_id SEPARATOR '|||') AS courses FROM student_courses WHERE student_id=2 GROUP BY student_id;
+------------+---------+
| student_id | courses |
+------------+---------+
| 2 | 3|||4|||5 |
+------------+---------+
3.除此之外,还可以对这个组的值来进行排序再连接成字符串,例如按courses_id降序来排:
SELECT student_id, GROUP_CONCAT(courses_id ORDER BY courses_id DESC) AS courses FROM student_courses WHERE student_id=2 GROUP BY student_id;
+------------+---------+
| student_id | courses |
+------------+---------+
| 2 | 5,4,3 |
+------------+---------+
4.需要注意的:
a.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]
b.长度陷阱
用了group_concat后,select里如果使用了limit是不起作用的.
用group_concat连接字段的时候是有长度限制的,并不是有多少连多少。但你可以设置一下。
使用group_concat_max_len系统变量,你可以设置允许的最大长度。
程序中进行这项操作的语法如下,其中 val 是一个无符号整数:
SET [SESSION | GLOBAL] group_concat_max_len = val;
若已经设置了最大长度, 则结果被截至这个最大长度。
在SQLyog中执行 SET GLOBAL group_concat_max_len = 10 后,重新打开SQLyog,设置就会生效。
http://blog.sina.com.cn/s/blog_4e808acf01009qna.html
- 关于Mysql5.6中使用group_concat()函数返回的数据总数不完整的坑
- mysql5注入中group_concat的使用
- 关于mysql函数GROUP_CONCAT的使用
- MySQL中group_concat()函数的使用
- MySql中group_concat()函数的使用
- mysql的group_concat函数使用
- MYSQL函数group_concat的使用
- MySQL : group_concat( ) 函数的使用
- mysql group_concat函数的使用
- mysql函数GROUP_CONCAT()的使用(多条数据合并)
- Mysql中group_concat的使用
- mysql中函数CONCAT及GROUP_CONCAT的使用
- MySQL中CONCAT和GROUP_CONCAT函数的使用
- 【MySQL】mysql中函数DISTINCT、group by、CONCAT、GROUP_CONCAT的使用以及mysql group_concat函数被截断的问题
- MySQL的GROUP_CONCAT()函数的使用
- Mysql中group_concat函数的妙用
- MySql行转列 MYSQL函数group_concat的使用
- 如何使用MySQL的 group_concat函数
- poj-1195-Mobile phones(二维树状数组)
- C3P0官方对于MySQL8小时问题的解决方案
- 怎么解决tomcat占用8080端口问题图文教程
- 使用SQLiteOpenHelper对数据库进行版本管理
- Use of undeclared identifier 'BMKMapPointMake'错误 (百度地图)
- 关于Mysql5.6中使用group_concat()函数返回的数据总数不完整的坑
- Python中有效的字符串合并方法
- 开发一个App要100万?太扯淡
- 网络攻击
- C#Xml,json解析以及Socket传输问题
- 从Android运行时出发,打造我们的脱壳神器
- AFNetworking 支持cookies的解决方案
- android View事件传递
- Codeforces Round #326 (Div. 2) D. Duff in Beach(LIS)