首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Django中,CharField和TextField有什么不同?

在Django中,CharField和TextField有什么不同?
EN

Stack Overflow用户
提问于 2011-09-09 05:13:48
回答 5查看 160.4K关注 0票数 366

documentation指出,CharField()应该用于较小的字符串,而TextField()应该用于较大的字符串。

好吧,但是“小”和“大”之间的界限在哪里呢?到底是怎么回事让这件事成为现实?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 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的。

票数 434
EN

Stack Overflow用户

发布于 2012-01-02 15:09:43

在某些情况下,它与字段的使用方式有关。在某些数据库引擎中,字段差异决定了如何(以及是否)在字段中搜索文本。CharFields通常用于可搜索的内容,比如您想在字符串“一加二”中搜索“一”。由于字符串较短,因此搜索引擎所需的时间较少。TextFields通常不是用来搜索的(比如博客的正文),而是用来保存大块的文本。现在,这大部分依赖于DB引擎,就像Postgres一样,这无关紧要。

即使这无关紧要,如果您使用ModelForms,您将在表单中获得不同类型的编辑字段。ModelForm将为CharField生成一行文本大小的HTML表单,为TextField生成多行文本的表单。

票数 44
EN

Stack Overflow用户

发布于 2017-04-10 18:09:15

例如,。在如下所示的模型中添加了2个字段。

代码语言:javascript
运行
复制
description = models.TextField(blank=True, null=True)
title = models.CharField(max_length=64, blank=True, null=True)

下面是应用迁移时执行的mysql查询。

对于描述(TextField),该字段定义为longtext

代码语言:javascript
运行
复制
ALTER TABLE `sometable_sometable` ADD COLUMN `description` longtext NULL;

根据string-type-overview,MySQL的TextField最大长度为4 4GB。

对于CharField(标题),max_length(必需)定义为varchar(64)

代码语言:javascript
运行
复制
ALTER TABLE `sometable_sometable` ADD COLUMN `title` varchar(64) NULL;
ALTER TABLE `sometable_sometable` ALTER COLUMN `title` DROP DEFAULT;
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7354588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档