Это разница между СУБД varchar
(или аналогичными) - они обычно указываются с максимальной длиной и могут быть более эффективными с точки зрения производительности или хранения - и text
(или аналогичными) типами - они обычно ограничиваются только жестко заданными пределами реализации (не Схема БД).
PostgreSQL 9, в частности, утверждает, что «между этими тремя типами нет различий в производительности» , но AFAIK есть некоторые различия, например, в MySQL, так что об этом следует помнить.
Хорошее практическое правило заключается в том, что вы используете, CharField
когда вам нужно ограничить максимальную длину, в TextField
противном случае.
На самом деле это не относится к Джанго.
TextField
по умолчанию может повлиять на переносимость вашего приложения. Возможно, производительность Postgres не снизится, но Oracle будет хранить ее как объектCLOB
, вызывающий некоторые неудобства, например, невозможность использовать это поле в операторах WHERE. Просто кое-что рассмотреть.CharField
не может бытьmax_length
больше 2000, или он выдаетORA-00910: specified length too long for its datatype
ошибку.В некоторых случаях это связано с тем, как используется поле. В некоторых механизмах БД различия полей определяют, как (и если) вы ищите текст в поле. CharFields обычно используются для поиска, например, если вы хотите найти «один» в строке «один плюс два». Поскольку строки короче, они занимают меньше времени для поиска движком. Текстовые поля обычно не предназначены для поиска (например, в теле блога), но предназначены для хранения больших кусков текста. Теперь большая часть этого зависит от БД Engine и, как в Postgres, это не имеет значения.
Даже если это не имеет значения, если вы используете ModelForms, вы получаете другой тип поля редактирования в форме. ModelForm сгенерирует форму HTML размером в одну строку текста для CharField и многострочным для TextField.
источник
Например, 2 поля добавляются в модель, как показано ниже.
Ниже приведены запросы mysql, выполняемые при переносе.
для
TextField
(описание) поле определяется какlongtext
Максимальная длина
TextField
MySQL составляет 4 ГБ в соответствии с обзором типа строки .для
CharField
(title) max_length (обязательно) определяется какvarchar(64)
источник
Avoid using null on string-based fields such as CharField and TextField
: docs.djangoproject.com/en/2.0/ref/models/fields/#null так что лучше держатьnull=False
.CharField
имеет max_length255
символов, в то время какTextField
может содержать больше255
символов. Используйте,TextField
когда у вас есть большая строка в качестве ввода. Полезно знать, что когдаmax_length
параметр передается в a,TextField
он передает проверку длиныTextArea
виджету.источник
VARCHAR
типами столбцов, имеютmax_length
ограничение до 255 символов, если вы используете для поля unique = True ». (Мое выделение.)У меня была странная проблема, и я понял неприятную странную разницу: когда я получаю URL от пользователя как CharField, а затем и использую его в html теге href, он добавляет этот URL к моему URL, а это не то, что я хочу. Но когда я делаю это с помощью Textfield, он пропускает только тот URL, который ввел пользователь. посмотрите на это: мой адрес веб-сайта:
http://myweb.com
CharField entery:
http://some-address.com
при нажатии на него:
http://myweb.comhttp://some-address.com
TextField Entery:
http://some-address.com
при нажатии на него:
http://some-address.com
Я должен отметить, что URL-адрес сохраняется в БД одинаково двумя способами, но я не знаю, почему результат при нажатии на них отличается
источник