4

SQL...

UPDATE Threads t 
SET t.Content = (
    SELECT GROUP_CONCAT(a.Content ORDER BY a.PageID SEPARATOR '<!-- pagebreak -->') 
    FROM MSarticlepages a
    WHERE a.ArticleID = t.MSthreadID GROUP BY a.ArticleID
)

ご覧のとおり、記事のすべてのページ (それぞれが長いテキストとして別々の行に格納されています) を取得し、GROUP_CONCAT でそれらを 1 つの長いテキスト行にしています。問題は、結果が非​​常に多くの文字しか表示されず、内容の約 90% が失われて完全に切り捨てられることです。CONCAT は長いテキストをうまく処理できませんか、それとも他に間違っていることがありますか?

4

3 に答える 3

15

MySQL のマニュアルによると、 の最大長はシステム変数GROUP_CONCATによって定義されておりgroup_concat_max_len、デフォルトは 1024 です。

この値は、次のコマンドを使用して増やすことができます。

SET group_concat_max_len = <int>

group_concat_max_lenただし、 の値自体は別のシステム変数 の値によって制限されていることに注意してくださいmax_allowed_packet。デフォルトは 1,048,576 です。

この値は、同じ構文を使用して最大 1,073,741,824 まで増やすことができます。

SET max_allowed_packet = <int>
于 2009-02-09T17:43:25.463 に答える
5

この投稿のタイトルは「CONCAT とロングテキストのトラブル」ですが、質問者は本当に GROUP_CONCAT について知りたがっていたので誤解を招きます。MySQL の CONCAT の制限に対処していたため、Google でこの投稿を見つけました。この投稿を見つけて、CONCAT に許可されている最大長を増やす方法を探している人は、次のようにします。

問題は、group_concat_max_len の調整が CONCAT では機能せず、GROUP_CONCAT でのみ機能することです。つまり、CONCAT でこの制限に達している場合は、クエリを修正して GROUP_CONCAT を使用する必要があります。

したがって、次のように CONCAT を使用しているとします。

UPDATE some_table
SET some_field=CONCAT(some_field,'super long string to append to the end of the data in some_field')
WHERE some_criteria_field = 'match on this string';

ただし、some_field の内容の最後に連結しようとしているデータは、切り捨てられているか、フィールド some_field を null/空に設定するだけです。したがって、CONCAT の明確な制限を緩和するために、クエリは次のように表示する必要があります。

SET @@session.group_concat_max_len = @@global.max_allowed_packet;
UPDATE some_table SET some_table.some_field=(
     SELECT GROUP_CONCAT( queue.append_to_end SEPARATOR '') as new_some_field
     FROM
     (
          SELECT append_to_end FROM some_table WHERE some_criteria_field = 'match on this string'
          UNION
          SELECT 'super long string to append to the end of the data in some_field' as append_to_end
     ) as queue
) WHERE some_criteria_field = 'match on this string'

詳細については、以下のリンクでこの回答を見つけた記事をご覧ください。ソース: http://boulderapps.co/mysql-concat-limitation

于 2014-04-12T05:46:39.703 に答える