Quelle est la différence entre CharField()
et TextField()
à Django? La documentation indique que cela CharField()
devrait être utilisé pour les petites chaînes et TextField()
devrait être utilisé pour les grandes chaînes. D'accord, mais où est la ligne tracée entre "petit" et "grand"? Que se passe-t-il sous le capot ici qui en fait le cas?
302
TextField
par défaut peut avoir un impact sur la portabilité de votre application. Il se peut qu'il n'y ait pas de perte de performances sur Postgres, mais Oracle le stockera comme unCLOB
qui présente des inconvénients, comme ne pas pouvoir utiliser le champ dans les instructions WHERE. Juste quelque chose à considérer.CharField
ne peut pas avoirmax_length
plus de 2000, ou il émet uneORA-00910: specified length too long for its datatype
erreur.Dans certains cas, elle est liée à l'utilisation du champ. 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. CharFields est généralement utilisé pour les éléments pouvant être recherchés, comme si vous souhaitez rechercher "un" dans la chaîne "un plus deux". Comme les chaînes sont plus courtes, elles nécessitent moins de temps pour que le moteur recherche. Les TextFields ne sont généralement pas destinés à être parcourus (comme peut-être le corps d'un blog) mais sont destinés à contenir de gros morceaux de texte. Maintenant, la plupart de cela dépend du moteur DB et comme dans Postgres, cela n'a pas d'importance.
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. Le ModelForm va générer un formulaire HTML de la taille d'une ligne de texte pour un CharField et multiligne pour un TextField.
la source
Par exemple.,. 2 champs sont ajoutés dans un modèle comme ci-dessous.
Vous trouverez ci-dessous les requêtes mysql exécutées lorsque des migrations sont appliquées.
pour
TextField
(description) le champ est défini commelongtext
La longueur maximale
TextField
de MySQL est de 4 Go selon l' aperçu des types de chaînes .pour
CharField
(title), la longueur max_ (obligatoire) est définie commevarchar(64)
la source
Avoid using null on string-based fields such as CharField and TextField
: docs.djangoproject.com/en/2.0/ref/models/fields/#null il est donc préférable de gardernull=False
.CharField
a max_length de255
caractères alors qu'ilTextField
peut contenir plus de255
caractères. À utiliserTextField
lorsque vous avez une grande chaîne en entrée. Il est bon de savoir que lorsque lemax_length
paramètre est passé dans un,TextField
il transmet la validation de la longueur auTextArea
widget.la source
VARCHAR
types de colonnes ont leurmax_length
restriction à 255 caractères si vous utilisez unique = True pour le champ. " (C'est moi qui souligne.)J'ai eu un problème étrange et j'ai compris une étrange différence désagréable: lorsque je reçois une URL de l'utilisateur en tant que CharField , puis que je l'utilise en html une balise par href, cela ajoute cette URL à mon URL et ce n'est pas ce que je veux. Mais quand je le fais par Textfield, il passe juste l'URL que l'utilisateur a entrée. regardez ces: mon adresse de site Web:
http://myweb.com
Entrée CharField:
http://some-address.com
en cliquant dessus:
http://myweb.comhttp://some-address.com
Entrée TextField:
http://some-address.com
en cliquant dessus:
http://some-address.com
Je dois mentionner que l'URL est enregistrée exactement de la même manière dans DB, mais je ne sais pas pourquoi le résultat est différent lorsque vous cliquez dessus
la source