it-swarm.it

Django CharField vs TextField

Qual è la differenza tra CharField() e TextField() in Django? documentazione dice che CharField() dovrebbe essere usato per stringhe più piccole e TextField() dovrebbe essere usato per stringhe più grandi. Va bene, ma dov'è tracciata la linea tra "piccolo" e "grande"? Cosa sta succedendo sotto il cofano qui che rende questo il caso?

258

È una differenza tra varchar (o simile) di RDBMS - quelli sono generalmente specificati con una lunghezza massima e potrebbero essere più efficienti in termini di prestazioni o archiviazione - e tipi text (o simili) - quelli sono generalmente limitati solo da limiti di implementazione codificati ( non uno schema DB).

PostgreSQL 9, in particolare, afferma che "Non c'è differenza di prestazioni tra questi tre tipi" , ma AFAIK ci sono alcune differenze in es. MySQL, quindi questo è qualcosa da tenere a mente.

Una buona regola pratica è che usi CharField quando devi limitare la lunghezza massima, TextField altrimenti.

Anche questo non è specifico per Django.

294
Cat Plus Plus

In alcuni casi è legato a come viene utilizzato il campo. In alcuni motori DB le differenze di campo determinano come (e se) cercare il testo nel campo. I CharField sono in genere utilizzati per le cose ricercabili, come se si desidera cercare "uno" nella stringa "uno più due". Poiché le stringhe sono più brevi, richiedono meno tempo per la ricerca del motore. I campi di testo in genere non sono pensati per essere cercati (come forse il corpo di un blog) ma devono contenere grossi pezzi di testo. Ora la maggior parte di questo dipende dal motore DB e, come in Postgres, non importa.

Anche se non importa, se si utilizza ModelForms si ottiene un diverso tipo di campo di modifica nel modulo. ModelForm genererà un formato HTML della dimensione di una riga di testo per un CharField e multilinea per un TextField.

31
renderbox

Per es.,. 2 campi vengono aggiunti in un modello come di seguito ..

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

Di seguito sono riportate le query mysql eseguite quando vengono applicate le migrazioni.


per TextField (descrizione) il campo è definito come longtext

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

La lunghezza massima di TextField di MySQL è di 4 GB secondo string-type-overview .


per CharField (titolo) max_length (richiesto) è definito come varchar(64)

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

CharField ha una lunghezza massima di 255 caratteri mentre TextField può contenere più di 255 caratteri. Utilizzare TextField quando si dispone di una stringa di grandi dimensioni come input. È bene sapere che quando il parametro max_length viene passato in TextField passa la convalida della lunghezza al widget TextArea.

6
Njeru Cyrus