set @sql1 = '';

    SELECT
      GROUP_CONCAT(DISTINCT
        CONCAT(
          'MAX(IF(field_id = ''',
          field_id,
          ''', value, NULL)) AS `',
          field_id,'`'
        )
      ) INTO @sql1
    FROM content_details;
    SET @sql1 = CONCAT('SELECT  ', @sql1, ' FROM content_details GROUP BY content_id');
    select @sql1;
    PREPARE stmt FROM @sql1;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
    

В приведенном выше коде переменная @ sql1 хранит только некоторые ограниченные символы. Здесь я динамически соединяю строку. Я не знаю точной общей длины струны, которая будет в будущем. мой вопрос в том, как мы можем установить неограниченную длину char для переменной $ sql1. Пожалуйста посоветуй.

4
Sathish Babu 4 Июн 2013 в 16:15
Какой у Вас вопрос?
 – 
RandomSeed
4 Июн 2013 в 16:17
В этом мне нужна переменная $ sql1 с неограниченной длиной символа.
 – 
Sathish Babu
4 Июн 2013 в 16:20
Пожалуйста, добавьте это в текст своего вопроса, чтобы нам не нужно было просматривать комментарии, чтобы узнать, в чем заключается реальный вопрос. Сталкивались ли вы с какой-либо проблемой? Максимальный размер переменной настолько велик, что я даже не стал бы думать об этом.
 – 
RandomSeed
4 Июн 2013 в 16:21
Да. У меня проблема с длиной строчки персонажа. Он не хранит все символы. хранение только некоторых ограниченных (255 с чем-то) символов.
 – 
Sathish Babu
4 Июн 2013 в 16:26
Предел, если такой предел существует, намного выше (см. С простым SET @a = 'blahblah....').
 – 
RandomSeed
4 Июн 2013 в 16:33

1 ответ

Лучший ответ

Похоже, у вас проблема с GROUP_CONCAT_MAX_LEN. Вы можете настроить длину этой переменной во время сеанса.

Длина этой переменной по умолчанию - 1024. У вас должна быть возможность использовать:

set session group_concat_max_len = yourNewValue;

Если бы вы установили это глобально, это повлияло бы на все другие соединения, поэтому вы можете захотеть установить его только для своего сеанса.

12
Taryn 4 Июн 2013 в 16:30