Страницы

Поиск по вопросам

суббота, 14 декабря 2019 г.

mysql обрезает большое текстовое поле в запросе

#mysql #sql


SELECT q.*, a.answer
FROM `questions` q
LEFT JOIN (
    SELECT question_id, GROUP_CONCAT(text SEPARATOR '|| ') answer
    FROM answers
    GROUP BY question_id
 ) a ON q.uid = a.question_id
 WHERE q.deleted = 0
 GROUP BY q.uid


Этот запрос выбирает вопросы и ответы к ним, склеивая их. В табличке ответы хранятся
в виде text. При выборке и конкатенации часть текста обрезается. Например если у меня
3 больших ответа, мне возвращает где-то целый первый ответ и половину второго. Если
в базе все эти ответы сделать маленькими - все отлично. В чем здесь проблема?
    


Ответы

Ответ 1



У функции GROUP_CONCAT есть ограничение на объем выводимых данных. По умолчанию 1024 символа для каждого объединения - для каждой выводимой строки. Если размер данных, полученных в результате конкатенации, больше, выводимый текст будет обрезан. Чтобы расширить размер, нужно выполнить команду: SET SESSION group_concat_max_len = 1000000; или SET @@group_concat_max_len = 1000000; (аналогична предыдущей). Но данная команда будет применена только к текущей сессии. По завершении сессии, например, при открытии нового соединения, значение данной переменной вернётся к начальному значению. Для установки глобальной переменной нужно выполнить следующую команду: SET GLOBAL group_concat_max_len = 1000000;

Комментариев нет:

Отправить комментарий