我有一个在整数字段上使用 mysql 的 GROUP_CONCAT 的查询。
我正在使用 PHPMYADMIN 开发此查询。我的问题是,我没有显示连接字段的结果 1,2,而是得到 [BLOB - 3B]。
查询是
SELECT rec_id,GROUP_CONCAT(user_id)
FROM t1
GROUP BY rec_id
(两个字段都是无符号整数,都不是唯一的)
我应该添加什么才能看到实际结果?
我有一个在整数字段上使用 mysql 的 GROUP_CONCAT 的查询。
我正在使用 PHPMYADMIN 开发此查询。我的问题是,我没有显示连接字段的结果 1,2,而是得到 [BLOB - 3B]。
查询是
SELECT rec_id,GROUP_CONCAT(user_id)
FROM t1
GROUP BY rec_id
(两个字段都是无符号整数,都不是唯一的)
我应该添加什么才能看到实际结果?
看起来好像 GROUP_CONCAT 期望该值是一个字符串。我刚刚遇到了同样的问题。通过将 int 列转换为字符串来解决它,如下所示:
SELECT rec_id,GROUP_CONCAT(CONVERT(user_id, CHAR(8)))
FROM t1
GROUP BY rec_id
想我会分享,以防你仍然有这个问题。
根据 MySQL 文档,CAST(expr AS type)
是标准 SQL,因此应该优先使用。此外,您可以省略字符串长度。因此,我建议如下:
SELECT rec_id, GROUP_CONCAT(CAST(user_id AS CHAR))
FROM t1
GROUP BY rec_id
对我来说,这有帮助(在这篇博文中找到):
在我的情况下,参数GROUP_CONCAT
是字符串,但该函数仍然产生一个 BLOB,但转换了GROUP_CONCAT
工作的结果。
CONVERT(GROUP_CONCAT(user_id) USING 'utf8')
在查询结果上方(左侧),您将看到+options
。按下它并标记
显示 BLOB 内容
你可以这样做:
set session group_concat_max_len = 512;
如果 group_concat_max_len 大于 512,查询将返回 byte[]。但是你可以传递给一个字符串。
System.Text.Encoding.Default.GetString((byte[])DataTable.Rows[0][0]);
在最新的 Phpmyadmin
运行查询后,您将看到一些结果,然后点 ..
所以只需单击选项(位于查询结果的顶部)
然后只需选择
全文
单选按钮,默认为部分文本
然后按Go按钮,您将看到完整的结果
如果您可以访问config.inc.php
phpMyAdmin 目录中的文件,那么我认为最好的解决方案是更改此行:
$cfg['Servers'][$i]['extension'] = 'mysql';
对此:
$cfg['Servers'][$i]['extension'] = 'mysqli';
如果您有可用的 mysqli 扩展,请使用它。它更安全,更优化,默认情况下它更好地处理 utf-8 的 BLOB 类型。您的 [BLOB] 条目应该开始显示为它们的值,而无需添加任何其他特殊配置选项。