MYSQL CONCAT MAX LENGTH
После этого поста: POST О CONCAT Моя проблема заключается в том, что у меня много строк CONCAT
в одну строку. Например, если у меня есть 10 строк со строкой около 50 символов, мой запрос покажет мне только 6-7 из этих строк или что-то в этом роде. Я ищу в стеке и Google, и я нашел, что я могу изменить максимальную длину CONCAT с помощью команды: SET group_concat_max_len := @@max_allowed_packet
. Что я делаю не так?
РЕДАКТИРОВАТЬ: Когда я показываю SHOW VARIABLES LIKE 'group_concat_max_len'
он показывает мне 1024. Mysql версия 5.0.96-log. Тип таблиц: MyISAM. Похоже, что нет никаких ограничений, я пытаюсь выбрать простой varchar с 2000 символов, и это выглядит хорошо. У меня есть 3 таблицы: 1-й - Товар с ItemID, 2-й - Пакет Description с ItemID и DescriptionID, 3-й Описание с DescriptionID.
Select
DISTINCT Item.ItemID as item
,GROUP_CONCAT(Description.DescriptionID) AS description
From Item
LEFT OUTER JOIN descriptionpack
on Item.ItemID=descriptionpack.ItemID
LEFT OUTER JOIN description
on descriptionpack.descriptionID=description.descriptionID
GROUP BY item
РЕДАКТИРОВАТЬ 2: Я думаю, что я нашел проблему, я сказал свою проблему своему провайдеру, и они ответили мне так:
Я рассмотрел ваш вопрос с нашей командой хостинга. Вы не сможете изменить глобальные настройки для этой и других переменных. Однако вы должны иметь возможность установить эту переменную для каждого сеанса, установив ее в первую очередь, перед другими запросами. Надеюсь, это поможет.
Так что теперь проблема в том, как это сделать.
Ответы
Ответ 1
Предположительно вы используете GROUP_CONCAT()
, а не просто CONCAT()
.
Значение по умолчанию group_concat_max_len
равно 1024, что является довольно небольшим пределом, если вы создаете большие длинные конкатенации.
Чтобы изменить его, используйте эту команду. Я установил длину в этом примере 100 000. Вы можете настроить его на все, что вам нужно.
SET SESSION group_concat_max_len = 100000;
Обычное значение для max_allowed_packet составляет один мегабайт, что, вероятно, больше, чем вам нужно.
group_concat_max_len
сам имеет практически неограниченный размер. Он ограничивается только длиной без знака платформы: 2 ^ 32-1 на 32-битной платформе и 2 ^ 64-1 на 64-битной платформе.
Если этого недостаточно для вашего приложения, пришло время принять предложение @eggyal и переосмыслить ваш подход.
Ответ 2
You need change group_concat_max_len default value in the bellow config file
**my.cnf file(Linux) and my.ini file(windows)**
[mysqld]//Add this line group_concat_max_len=15000 under mysqld section
group_concat_max_len=15000
Note: After change is done You need to restart your MySQL server.
my.cnf file path in linux :
1. /etc/my.cnf
2./etc/mysql/my.cnf
3.$MYSQL_HOME/my.cnf
4.[datadir]/my.cnf
5.~/.my.cnf