为啥我得到这个奇怪的结果:[BLOB - ...]? [复制]

Posted

技术标签:

【中文标题】为啥我得到这个奇怪的结果:[BLOB - ...]? [复制]【英文标题】:Why I get this strange result: [BLOB - ...]? [duplicate]为什么我得到这个奇怪的结果:[BLOB - ...]? [复制] 【发布时间】:2013-05-12 09:45:33 【问题描述】:

这是我的数据库架构:

Post:
id
title
body
date

Tag:
id
title

Post_Tag:
id
id_post
id_tag

Comment:
id
id_post
body
date

这是我的查询:

SELECT
    Post.id AS post_id,
    Post.title AS post_title,
    Post.body AS post_body,
    GROUP_CONCAT(CONCAT(Tag.id, "|", Tag.title) SEPARATOR '#') AS tags,
    COUNT(Comment.id) AS comment_count
FROM Post
LEFT JOIN Comment ON Post.id = Comment.id_post
LEFT JOIN Post_Tag ON Post.id = Post_Tag.id_post
LEFT JOIN Tag ON Tag.id = Post_Tag.id_tag
GROUP BY Post.id
ORDER BY Post.date ASC

谁能告诉我为什么我在标签列下面得到这些奇怪的结果([BLOB - ...])?

id  title           body            tags            comment_count
1   hello guys  blablabla...    [BLOB - 8B]         8
2   hello all   blablabla...    [BLOB - 14B]        3
3   how to tell blablabla...    [BLOB - 8B]         5
4   hello world blablabla...    [BLOB - 5B]         7

【问题讨论】:

dev.mysql.com/doc/refman/5.0/en/blob.html 好的,但我怎样才能得到正确的结果:)? 【参考方案1】:

这是一个比较有名的配置问题:你的group_concat_max_len被设置为一个很大的值,迫使MySql使用BLOBs而不是varchars来获取group_concat的结果。

要修复,请在 my.inimy.cnf 文件中将 group_concat_max_len 设置为 512,然后重新启动 MySql。

这是link to a post with more information。

【讨论】:

【参考方案2】:

替换:

GROUP_CONCAT(CONCAT(Tag.id, "|", Tag.title) SEPARATOR '#') AS tags,

与:

CAST(GROUP_CONCAT(CONCAT(Tag.id, "|", Tag.title) SEPARATOR '#') AS CHAR) AS tags,

文档:CAST function

【讨论】:

【参考方案3】:

您也可以使用CONVERT() 并将BLOB 数据转换为utf8

CONVERT(GROUP_CONCAT(CONCAT(Tag.id, "|", Tag.title) SEPARATOR '#') AS tags USING utf8),

【讨论】:

以上是关于为啥我得到这个奇怪的结果:[BLOB - ...]? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥我在 node.js 中使用 parseInt 会得到奇怪的结果? (与 chrome js 控制台的结果不同)

不理解?为啥我们在“Android Sqlite”中需要 BLOB

为啥这个数据网格以奇怪的顺序排序?

为啥我不能在“|”处分开在clojure中[重复]

为啥我尝试在 C# 中实现基本的自旋锁会得到这个结果?

为啥我得到这个错误结果=方法(y)FutureWarning:元素比较失败;而是返回标量