Estoy tratando de guardar una identificación de la compañía de la franja (el servicio de facturación) [alrededor de 200 caracteres o menos] en mi base de datos en Django.
El error específico es:
database error: value too long for type character varying(4)
¿Cómo puedo permitir que Django permita valores más largos?
Vi: el valor es demasiado largo para la variación de caracteres de tipo (N) y: el dispositivo Django falla, declarando “DatabaseError: el valor es demasiado largo para la variación de caracteres de tipo (50)”
Mi base de datos ya está codificada para UTF-8, de acuerdo con mi servidor web.
EDITAR : veo que una respuesta recomienda hacer la columna más ancha. ¿Implica eso modificar la base de datos PostgreSQL?
Mi sistema específico es Webfaction, CentOs shared machine, Django ejecutándose en PostgreSQL. Realmente apreciaría una descripción conceptual de lo que está pasando y cómo puedo solucionarlo.
Sí, hacer la columna más ancha. El mensaje de error es bastante claro: sus 200 caracteres son demasiado grandes para caber en un varchar (4).
Primero, actualice los atributos de su modelo max_length
de 4 a un número que espera que sea lo suficientemente largo como para contener los datos que está suministrando.
A continuación, debe actualizar la columna de la base de datos, ya que django no actualizará automáticamente las columnas existentes .
Aquí hay algunas opciones:
1: Suelte la base de datos y ejecute syncdb nuevamente. Advertencia: perderás todos tus datos.
2: Actualizar manualmente la columna a través de SQL.
Escriba python manage.py dbshell
para acceder al shell de su base de datos y escriba
ALTER TABLE my_table ALTER COLUMN my_column TYPE VARCHAR(200)
3: Aprenda y use una herramienta de migración de base de datos como django south que le ayudará a mantener su base de datos actualizada con su código de modelo.
Usando Django 1.11 y Postgres 9.6 me encontré con esto, sin ninguna razón aparente.
Establecí max_length = 255 en el archivo de migración y ejecuté:
gestionar.py migrar
Luego, puse la longitud correcta en max_length del modelo y ejecuté otras migraciones y la migración se ejecutó nuevamente.