true example blank sql django database storage

sql - example - django textfield



Django CharField vs TextField (4)

¿Cuál es la diferencia entre CharField() y TextField() en Django? La documentation dice que CharField() debe usarse para cadenas más pequeñas y TextField() para cadenas más grandes. Está bien, pero ¿dónde se traza la línea entre "pequeño" y "grande"? ¿Qué está pasando aquí debajo del capó que hace que este sea el caso?


En algunos casos está vinculado a cómo se utiliza el campo. En algunos motores de base de datos, las diferencias de campo determinan cómo (y si) busca texto en el campo. Los campos de caracteres se utilizan normalmente para cosas que se pueden buscar, como si desea buscar "uno" en la cadena "uno más dos". Dado que las cadenas son más cortas, el motor debe buscarlas a través de menos tiempo. Normalmente, los campos de texto no están destinados a ser buscados (como tal vez el cuerpo de un blog), sino que están destinados a contener grandes porciones de texto. Ahora, la mayor parte de esto depende del motor DB y, como en Postgres, no importa.

Incluso si no importa, si usa ModelForms, obtiene un tipo diferente de campo de edición en el formulario. El ModelForm generará un formulario HTML del tamaño de una línea de texto para un CharField y multilínea para un TextField.


Es una diferencia entre varchar (o similar) de RDBMS, que generalmente se especifican con una longitud máxima, y ​​podrían ser más eficientes en términos de rendimiento o almacenamiento, y tipos de text (o similares), que generalmente están limitados solo por límites de implementación codificados ( no es un esquema de base de datos).

PostgreSQL 9, específicamente, afirma que "No hay diferencia de rendimiento entre estos tres tipos" , pero AFAIK hay algunas diferencias en, por ejemplo, MySQL, por lo que es algo que se debe tener en cuenta.

Una buena regla general es que use CharField cuando necesite limitar la longitud máxima, de lo contrario, TextField .

Esto no es realmente Django específico, también.


Por ejemplo,. Se agregan 2 campos en un modelo como el siguiente ..

description = models.TextField(blank=True, null=True) title = models.CharField(max_length=64, blank=True, null=True)

A continuación se muestran las consultas de mysql ejecutadas cuando se aplican migraciones.

para TextField (descripción) el campo se define como un texto longtext

ALTER TABLE `sometable_sometable` ADD COLUMN `description` longtext NULL;

La longitud máxima de TextField de MySQL es de 4 GB según la string-type-overview .

para CharField (título) el max_length (requerido) se define como varchar(64)

ALTER TABLE `sometable_sometable` ADD COLUMN `title` varchar(64) NULL; ALTER TABLE `sometable_sometable` ALTER COLUMN `title` DROP DEFAULT;


CharField tiene una CharField de 255 caracteres, mientras que TextField puede contener más de 255 caracteres. Use TextField cuando tenga una cadena grande como entrada. Es bueno saber que cuando el parámetro max_length se pasa a un TextField , pasa la validación de longitud al widget TextArea .