Ошибка формы / базы данных Django: слишком длинное значение для изменяемого символа (4) - PullRequest
5 голосов
/ 13 декабря 2011

Я пытаюсь сохранить идентификатор компании в виде полосы (биллинговой службы) [около 200 символов или около того] в моей базе данных в Django.

Конкретная ошибка:

database error: value too long for type character varying(4)

Как включить Django для разрешения более длинных значений?

Я видел: значениеслишком длинное для изменяющегося символа типа (N) и: Сбой устройства Django с указанием «DatabaseError: значение слишком длинное для изменяющегося символа типа (50)»

  • моя база данных уже закодирована для UTF-8, в соответствии с моим веб-хостом.

  • РЕДАКТИРОВАТЬ : я вижу, что один ответ рекомендует сделать столбец шире. Включает ли это изменение базы данных PostgreSQL?

Моя конкретная система - Webfaction, общая машина CentOs, Django, работающая на PostgreSQL.Я был бы очень признателен за концептуальный обзор того, что происходит и как я могу это исправить.

Ответы [ 2 ]

14 голосов
/ 13 декабря 2011

Да, сделать колонку шире.Сообщение об ошибке совершенно ясно: ваши 200 символов слишком велики, чтобы поместиться в varchar (4).

Сначала обновите атрибут поля модели max_length с 4 до числа, которое, как вы ожидаете, будет достаточно длинным, чтобы содержать данные, которые вы его вводите.

Далее вам нужно обновить сам столбец базы данных, так как django не будет автоматически обновлять существующие столбцы .

Вот несколько вариантов:

1: Отбросить базу данных и снова запустить syncdb.Предупреждение: вы потеряете все свои данные.

2: вручную обновите столбец с помощью SQL.

Введите python manage.py dbshell, чтобы войти в оболочку базы данных, и введите

ALTER TABLE my_table ALTER COLUMN my_column TYPE VARCHAR(200)

3: Изучите и используйте инструмент миграции базы данных, например django south , который поможет обновлять базу данных с помощью кода модели.

1 голос
/ 03 октября 2017

Используя Django 1.11 и Postgres 9.6, я столкнулся с этим без видимой причины.

Я установил max_length = 255 в файле миграции и выполнил:

manage.py migrate

Затем я установил правильную длину для модели max_length и запустили еще одну makemigrations и пробег мигрирует снова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...