documentation指出,CharField()
应该用于较小的字符串,而TextField()
应该用于较大的字符串。
好吧,但是“小”和“大”之间的界限在哪里呢?到底是怎么回事让这件事成为现实?
发布于 2011-09-09 05:23:39
这是关系数据库的varchar
(或类似的)和text
(或类似的)类型之间的不同之处,前者通常使用最大长度指定,在性能或存储方面可能更有效-后者通常仅受硬编码的实现限制(而不是DB模式)。
具体来说,PostgreSQL 9规定了"There is no performance difference among these three types",但AFAIK在MySQL等方面存在一些差异,因此这一点需要牢记。
一个很好的经验法则是,当需要限制最大长度时,使用CharField
,否则使用TextField
。
这也不是真正特定于Django的。
发布于 2012-01-02 15:09:43
在某些情况下,它与字段的使用方式有关。在某些数据库引擎中,字段差异决定了如何(以及是否)在字段中搜索文本。CharFields通常用于可搜索的内容,比如您想在字符串“一加二”中搜索“一”。由于字符串较短,因此搜索引擎所需的时间较少。TextFields通常不是用来搜索的(比如博客的正文),而是用来保存大块的文本。现在,这大部分依赖于DB引擎,就像Postgres一样,这无关紧要。
即使这无关紧要,如果您使用ModelForms,您将在表单中获得不同类型的编辑字段。ModelForm将为CharField生成一行文本大小的HTML表单,为TextField生成多行文本的表单。
发布于 2017-04-10 18:09:15
例如,。在如下所示的模型中添加了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
最大长度为4 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;
https://stackoverflow.com/questions/7354588
复制相似问题