[РЕШЕНО] Изменение максимальной длины текстового поля

Главные вкладки

Аватар пользователя SifonChe SifonChe 1 мая 2013 в 5:38

Привет! Я создал новый тип материала, добавил в него 5 полей. У одного текстового поля максимальная длина 60 символов.
Теперь вот появилась необходимость расширить эту длину до 250 символов, но в настройках поля "Field settings" поле Maximum length не активно и надпись "There is data for this field in the database. The field settings can no longer be changed."

Как изменить длину?

Комментарии

Аватар пользователя Stan.Ezersky Stan.Ezersky 1 мая 2013 в 9:47

"SifonChe" wrote:
Как изменить длину?
Изменить поле в базе данных, у вас же конкретно написано:
"SifonChe" wrote:
There is data for this field in the database. The field settings can no longer be changed.

Аватар пользователя SifonChe SifonChe 1 мая 2013 в 11:00

Stan.Ezersky wrote:
"SifonChe" wrote:
Как изменить длину?
Изменить поле в базе данных, у вас же конкретно написано:
"SifonChe" wrote:
There is data for this field in the database. The field settings can no longer be changed.

Там таблиц до х и больше. В какой править?

Аватар пользователя SifonChe SifonChe 1 мая 2013 в 11:52

dotter90 wrote:
вот Вам пример, пробуйте.

И что вы этой картинкой хотели сказать?

Поле, которое я хочу расширить с 60 символов до 250 называется arctic.
В базе нашел 2 таблицы field_data_field_arctic и field_Revision_field_arctic в обоих таблицах изменил параметр field_artic_value до 250.
Но все-равно при добавлении нового матереила в это поле больше 60 символов не пишется.

Аватар пользователя mihail1704 mihail1704 19 января 2017 в 0:53

Решение написано здесь: http://drupal.stackexchange.com/questions/8829/how-to-change-the-length-...
Например, меняем длину текстового поля с 10 до 25 символов.
Для этого выполняем запросы в базе:

ALTER TABLE `field_data_имя_поля`
CHANGE `field_text_value` `field_text_value` VARCHAR( 25 )
CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL;
ALTER TABLE `field_revision_имя_поля`
CHANGE `field_text_value` `field_text_value` VARCHAR( 25 )
CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL;

Далее меняем в таблице field_config настройки поля "field_имя_поля". Настройки "зашифрованы" в BLOB
Делаем запрос и расшифровываем внутренности этого BLOB:

SELECT CAST(`data` AS CHAR(10000) CHARACTER SET utf8)
FROM `field_config` WHERE field_name = 'field_имя_поля';

Получаем что-то вроде этого:

a:7:{s:12:"translatable";s:1:"1";s:12:"entity_types";a:0:{}s:8:"settings";a:2:
    {s:10:"max_length";s:2:"10";s:17:"field_permissions";a:5:
    //и много других символов...

Из всей полученной массы символов находим запись ......{s:10:"max_length";s:2:"10";........
В нем мы изменяем 10 на 25. Все остальные символы оставляем без изменений. И выполняем запрос к базе:

UPDATE `field_config`
SET DATA = 'a:7:{...a:2:{s:10:"max_length";s:2:"25";...}'
WHERE `field_name` = 'field_имя_поля'

(в запросе, там где "data = ' a:7:......" вставляем полностью полученное из запроса BLOB поле, но с измененными значениями)
P.S. В куске поля BLOB (из нашего примера, .....{s:10:"max_length";s:2:"10";.....), s:2 указывает на разрядность поля. Например, 10 символов s:2 (2 разряда)
255 символов s:3 (3 разряда)
5 символов s:1 (1 разряд)
Очищаем кеш базы.