¿Cuál es el tamaño máximo de 'max_length' en Django?

86

Este es mi modelo:

class Position(models.Model):
    map = models.ForeignKey(Map,primary_key=True)
    #members=models.CharField(max_length=200)
    LatLng = models.CharField(max_length=40000)
    infowindow = models.CharField(max_length=40000)

Pero no puede funcionar. ¿Cuál es el tamaño máximo del max_lengthparámetro?

zjm1126
fuente

Respuestas:

104

Eso depende del backend de la base de datos. El Django DB Docs le dirá, que max_length=255se garantiza que funcione siempre.

Si necesita algo de la cantidad que ha especificado en su pregunta, le sugiero que use un TextField .

Haes
fuente
2
Siendo este el caso, junto con el hecho de que para el DB lo uso también limita la opción única a 255, personalmente me apego al mantra de que si necesito un CharField que sea más grande que 255, lo convierto en TextField.
digitaldreamer
13
El tamaño máximo de TextField también depende de DB. Para MySQL, es alrededor de 4 billones.
Justin Abrahms
2
En MySQL, Charfield es un varchar, máximo 65,535 (pero este también es el tamaño máximo de fila), consulte stackoverflow.com/questions/13506832/… . No hay penalización por usar un tamaño máximo grande, MySQL usará lo que realmente necesita. Tenga en cuenta que los campos de texto se manejan de manera diferente, con implicaciones de rendimiento, por lo que es mejor indexar con otros campos en otra tabla (cuantas más filas indexadas por página de base de datos, mejor), encuentre lo que necesita, luego, con la clave ahora conocida, obtenga el campo de texto.
Aviah Laor
2
Si bien TextField es una buena opción para> 255 cadenas, no se aplica max_lengtha nivel de modelo (o base de datos). Esto podría complicar alguna lógica de validación, a diferencia del caso de CharField, que le permite especificar una max_lengthque Django hace cumplir.
elnygren
1
El párrafo vinculado dice: "Todos los campos que se almacenan con tipos de columna VARCHAR tienen su max_length restringido a 255 caracteres si está usando unique = True para el campo. Esto afecta a CharField, SlugField".
Chris
5

Utilizar en su TextFieldlugar

infowindow = models.TextField()
tshubham7
fuente
2
Tenga en cuenta que TextFieldno se valida max_lengtha nivel de base de datos.
Chris Conlan
1

Depende de la base de datos de backend. Si usa MySQL 5.6, hay un límite de 65.535. Si está usando arriba de eso, permitirá 1024 también pero no más allá de eso.

class Demo(models.Model):
    max_test = models.CharField(max_length=1024)

Corrí arriba en MySQL 5.7

Vitthal Sarode
fuente
1
Si esto funcionará, depende del backend de la base de datos utilizado como ya se mencionó en la respuesta aceptada. Si bien esto podría funcionar, una mejor solución es usar TextField.
colidyre
0

Realmente depende de la base de datos que use para el modelo. PostgreSQL, MySQL, etc. tienen diferentes configuraciones y límites.

Si realmente necesita una cadena larga o no está seguro de cuánto tiempo sería la variable, siempre es seguro usarla variable=models.TextField().

Adrian Stanica
fuente