421 Stimmen

Was ist der Unterschied zwischen CharField und TextField in Django?

En Dokumentation sagt, dass CharField() sollte für kleinere Strings verwendet werden und TextField() sollte für größere Zeichenketten verwendet werden.

Okay, aber wo ist die Grenze zwischen "klein" und "groß"? Was geht hier unter der Haube vor, dass dies der Fall ist?

509voto

Cat Plus Plus Punkte 119072

Es ist ein Unterschied zwischen RDBMS's varchar (oder ähnlich) - diese sind in der Regel mit einer Maximallänge angegeben und können in Bezug auf Leistung oder Speicherplatz effizienter sein - und text (oder ähnliche) Typen - diese sind in der Regel nur durch hart kodierte Implementierungsgrenzen (nicht durch ein DB-Schema) begrenzt.

PostgreSQL 9 besagt, dass "Es gibt keinen Leistungsunterschied zwischen diesen drei Typen". aber AFAIK gibt es einige Unterschiede in z.B. MySQL, so dass dies etwas ist, das man im Auge behalten sollte.

Eine gute Faustregel ist, dass Sie CharField wenn Sie die maximale Länge begrenzen müssen, TextField sonst.

Auch dies ist nicht wirklich Django-spezifisch.

52voto

renderbox Punkte 1517

In einigen Fällen hängt es damit zusammen, wie das Feld genutzt wird. In einigen DB-Engines bestimmen die Feldunterschiede, wie (und ob) Sie nach Text im Feld suchen. CharFields werden typischerweise für Dinge verwendet, die durchsuchbar sind, z. B. wenn man nach "eins" in der Zeichenfolge "eins plus zwei" suchen will. Da die Zeichenketten kürzer sind, benötigt die Suchmaschine weniger Zeit zum Durchsuchen. TextFields sind in der Regel nicht zum Durchsuchen gedacht (wie z. B. der Text eines Blogs), sondern für große Textabschnitte. Das meiste davon hängt von der DB-Engine ab, und wie in Postgres spielt es keine Rolle.

Auch wenn es keine Rolle spielt, wenn Sie ModelForms verwenden, erhalten Sie eine andere Art von Bearbeitungsfeld im Formular. Das ModelForm generiert ein HTML-Formular in der Größe einer Textzeile für ein CharField und mehrzeilig für ein TextField.

16voto

SuperNova Punkte 20412

Zum Beispiel,. 2 Felder werden in einem Modell wie unten hinzugefügt..

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

Im Folgenden sind die mysql-Abfragen aufgeführt, die bei der Anwendung von Migrationen ausgeführt werden.


para TextField (Beschreibung) ist das Feld definiert als ein longtext

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

Die maximale Länge der TextField von MySQL beträgt 4 GB gemäß der String-Typ-Übersicht .


para CharField (title) ist die max_length(required) definiert als varchar(64)

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

15voto

Njeru Cyrus Punkte 1587

CharField hat max_length von 255 Zeichen, während TextField kann mehr aufnehmen als 255 Zeichen. Verwenden Sie TextField wenn Sie eine große Zeichenkette als Eingabe haben. Es ist gut zu wissen, dass wenn die max_length Parameter wird an eine TextField übergibt er die Längenüberprüfung an den TextArea Widget.

4voto

Murad Punkte 843

TextFeld kann mehr als 255 Zeichen enthalten, aber ZeichenFeld wird verwendet, um die kürzere Länge von Zeichenketten zu speichern.

Wenn Sie einen langen Text speichern möchten, verwenden Sie TextField, und wenn Sie kürzere Zeichenfolgen speichern möchten, ist CharField nützlich.

  article_title = models.CharField(max_length=150)
  article_body = models.TextField()

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X