Проблемы с GROUP_CONCAT и Longtext в MySQL

Asked
Viewd13196

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 помещает их в одна строка с длинным текстом. Проблема в том, что результатов очень много символов, а затем полностью обрезается, теряя около 90% содержимое. CONCAT не очень хорошо обрабатывает длинный текст или есть что-то еще я делаю не так?

3 ответов

14

Согласно руководству по 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>
 
  • Thanks. I appreciate the help!

    Iwasakabukiman09 февраля 2009, 17:50
1

GROUP_CONCAT в документации mysql:

Результат обрезается до максимума длина, которая задается системная переменная group_concat_max_len, который имеет значение по умолчанию 1024. значение можно установить выше, хотя эффективная максимальная длина возврата значение ограничено значением max_allowed_packet. Синтаксис для изменить значение group_concat_max_len во время выполнения выглядит как следует, где val - беззнаковый целое число:

 SET [GLOBAL | SESSION] group_concat_max_len = val;
 

http: // dev .mysql.com / doc / refman / 5.0 / en / group-by-functions.html # function_group-concat

Надеюсь, это поможет.