Quelle est la différence entre CharField()
et TextField()
dans Django? La documentation indique que CharField()
doit être utilisé pour les chaînes plus petites et que TextField()
doit être utilisé pour les chaînes plus grandes. D'accord, mais où est la ligne de démarcation entre "petit" et "grand"? Qu'est-ce qui se passe sous le capot ici qui en fait le cas?
C'est une différence entre le varchar
(ou similaire) du SGBDR - ceux-ci sont généralement spécifiés avec une longueur maximale, et pourraient être plus efficaces en termes de performances ou de stockage - et les types text
(ou similaires) - généralement limité uniquement par des limites d'implémentation codées en dur (pas un schéma de base de données).
PostgreSQL 9, en particulier, indique que "Il n'y a pas de différence de performance entre ces trois types" , mais, autant que je sache, il existe certaines différences dans, par exemple. MySQL, c'est donc quelque chose à garder à l'esprit.
En règle générale, vous utilisez CharField
lorsque vous devez limiter la longueur maximale, TextField
sinon.
Ce n'est pas vraiment spécifique à Django, aussi.
Dans certains cas, cela dépend de la manière dont le champ est utilisé. Dans certains moteurs de base de données, les différences de champ déterminent comment (et si) vous recherchez du texte dans le champ. Les champs CharField sont généralement utilisés pour les recherches, comme si vous souhaitez rechercher "un" dans la chaîne "un plus deux". Comme les chaînes sont plus courtes, le moteur consomme moins de temps. Les TextFields ne sont généralement pas destinés à être recherchés (comme peut-être le corps d'un blog), mais sont destinés à contenir de gros morceaux de texte. Maintenant, cela dépend en grande partie du moteur de base de données et, comme dans Postgres, peu importe.
Même si cela n'a pas d'importance, si vous utilisez ModelForms, vous obtenez un type de champ d'édition différent dans le formulaire. ModelForm générera un formulaire HTML de la taille d'une ligne de texte pour un CharField et d'un multiligne pour un TextField.
Pour, par exemple. 2 champs sont ajoutés dans un modèle comme ci-dessous.
description = models.TextField(blank=True, null=True)
title = models.CharField(max_length=64, blank=True, null=True)
Vous trouverez ci-dessous les requêtes mysql exécutées lors de l’application des migrations.
pour TextField
(description), le champ est défini comme un longtext
ALTER TABLE `sometable_sometable` ADD COLUMN `description` longtext NULL;
La longueur maximale de TextField
de MySQL est de 4 Go selon string-type-overview .
pour CharField
(titre), la longueur maximale (obligatoire) est définie comme varchar(64)
ALTER TABLE `sometable_sometable` ADD COLUMN `title` varchar(64) NULL;
ALTER TABLE `sometable_sometable` ALTER COLUMN `title` DROP DEFAULT;
CharField
a une longueur maximale de 255
caractères, tandis que TextField
peut contenir plus de 255
caractères. Utilisez TextField
lorsque vous avez une grande chaîne en entrée. Il est bon de savoir que lorsque le paramètre max_length
est transmis à une variable TextField
, il transmet la validation de la longueur au widget TextArea
.