0

これは私のデータベーススキーマです:

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
4

3 に答える 3

1

これは比較的よく知られた構成の問題です。 yourgroup_concat_max_lenが大きな値に設定されているため、MySql はvarcharの結果に対して sではなく BLOB を使用する必要がありgroup_concatます。

修正するには、またはファイルに設定group_concat_max_lenし、MySql を再起動します。512my.inimy.cnf

詳細が記載された投稿へのリンクを次に示します。

于 2013-05-17T09:16:54.803 に答える
0

交換:

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

と:

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

ドキュメント: CAST 関数

于 2013-05-17T09:16:30.033 に答える
0

CONVERT()BLOB データを使用して変換することもできます。utf8

CONVERT(GROUP_CONCAT(CONCAT(Tag.id, "|", Tag.title) SEPARATOR '#') AS tags USING utf8),
于 2013-05-17T10:31:37.927 に答える