这是 RDBMS 的
varchar
(或类似)类型(通常指定最大长度,并且在性能或存储方面可能更有效)和 text
(或类似)类型(通常仅受限制)之间的区别通过硬编码的实现限制(不是数据库模式)。
PostgreSQL 9 特别指出 “这三种类型之间没有性能差异”,但据我所知,存在一些差异,例如MySQL,所以这是要记住的事情。
一个好的经验法则是,当您需要限制最大长度时,使用
CharField
,否则使用 TextField
。
这也不是真正特定于 Django 的。
在某些情况下,它与字段的使用方式有关。在某些数据库引擎中,字段差异决定了您如何(以及是否)在字段中搜索文本。 CharFields 通常用于可搜索的内容,例如您想在字符串“一加二”中搜索“一”。由于字符串较短,因此引擎搜索所需的时间较少。文本字段通常不用于搜索(就像博客的正文),而是用于保存大块文本。现在,这大部分取决于数据库引擎,就像在 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;
根据
string-type-overview,MySQL
TextField
的最大长度为4GB。
对于
CharField
(标题),max_length(必需)定义为 varchar(64)
ALTER TABLE `sometable_sometable` ADD COLUMN `title` varchar(64) NULL;
ALTER TABLE `sometable_sometable` ALTER COLUMN `title` DROP DEFAULT;
当输入的字符串较大时,请使用
TextField
。当 max_length
参数传递到 TextField
时,它将长度验证传递给 TextArea
小部件。
当您想要存储长文本时,请使用 TextField,或者当您想要较短的字符串时,CharField 很有用。
article_title = models.CharField(max_length=150)
article_body = models.TextField()