Django CharField против TextField

в чем разница между CharField() и TextField() в Django? The документация говорит, что CharField() следует использовать для меньших строк и TextField() следует использовать для больших строк. Хорошо, но где проходит граница между "маленьким" и "большим"? Что происходит здесь под капотом, что делает это делом?

4 ответов


это разница между СУБД varchar (или аналогичные) - они обычно указываются с максимальной длиной и могут быть более эффективными с точки зрения производительности или хранения - и text (или аналогичные) типы-они обычно ограничены только жестко закодированными ограничениями реализации (а не схемой БД).

PostgreSQL 9, в частности, утверждает, что "нет никакой разницы в производительности между этими тремя типами", но AFAIK есть некоторые различия, например, в MySQL, так что это это то, что нужно иметь в виду.

хорошее эмпирическое правило заключается в том, что вы используете CharField когда вам нужно ограничить максимальную длину,TextField иначе.

это на самом деле не специфично для Django.


в некоторых случаях это связано с тем, как используется поле. В некоторых ядрах БД различия полей определяют, как (и если) вы ищете текст в поле. CharFields обычно используются для вещей, которые можно найти, например, если вы хотите найти " один "в строке"один плюс два". Поскольку строки короче, они занимают меньше времени для поиска движка. Текстовые поля обычно не предназначены для поиска (например, тело блога), но предназначены для хранения большие куски текста. Теперь большая часть этого зависит от DB Engine и, как и в Postgres, это не имеет значения.

даже если это не имеет значения, если вы используете ModelForms вы получаете другой тип поля редактирования в форме. ModelForm создаст HTML-форму размером в одну строку текста для CharField и многострочную для TextField.


например.,. 2 поля добавляются в модель, как показано ниже..

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

ниже приведены запросы mysql, выполняемые при применении миграций.

на TextField(описание) поле определяется как longtext

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

максимальная длина TextField MySQL составляет 4 ГБ в соответствии с строка-тип-описание.

на CharField(название) max_length (обязательно) определяется как varchar(64)

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

CharField имеет max_length из 255 символы TextField больше чем 255 символы. Использовать TextField когда у вас есть большая строка в качестве входных данных. Хорошо знать, что когда max_length параметр передается в TextField он передает проверку длины в TextArea виджет.