Django中CharField()
和TextField()
和有什么不一样? documentation表示CharField()
应该用于较小的字符串,而TextField()
应该用于较大的字符串。好的,但“小”和“大”之间的界线在哪里?这种情况下发生了什么?Django CharField vs TextField
回答
这是RDBMS的varchar
(或类似)之间的区别 - 通常用最大长度指定,并且在性能或存储方面可能更高效 - 以及text
(或类似)类型 - 通常仅限于硬编码的实现限制(不是数据库模式)。 PostgreSQL 9,具体说,"There is no performance difference among these three types",但是AFAIK有一些不同之处,例如, MySQL,所以这是要记住的事情。
一个很好的经验法则是,如果需要限制最大长度,则使用CharField
,否则为TextField
。
这并不是真正的Django特定的。
在某些情况下,它与使用该字段的方式有关。在某些数据库引擎中,字段差异决定了如何(以及如果)在字段中搜索文本。 CharFields通常用于可搜索的事物,例如,如果要在字符串“one plus two”中搜索“one”。由于字符串越短,发动机搜索的时间越少。 TextFields通常不是要通过搜索(比如也许是博客的主体),而是要保存大量的文本。现在大部分依赖于数据库引擎,就像在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;
为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为255个字符MAX_LENGTH而TextField可以容纳超过255个字符。如果有大字符串作为输入,请使用TextField。它很好地知道,当max_length参数传递给TextField时,它将长度验证传递给TextArea小部件。
- 1. Django:将CharField转换为TextField且数据完好
- 2. Django在窗体中显示CharField为TextField错误
- 3. Django CharField限制
- 4. Django的模型Charfield
- 5. Django的CharField定义
- 6. CharField max_length 2^n vs 2^n-1
- 7. 如何从CharField在Django
- 8. Django的CharField至字符串
- 9. Django CharField,选择和迁移
- 10. django Charfield适合主键?
- 11. Django Forms:En- /动态禁用Charfield
- 12. Django charfield组合默认值
- 13. Django CharField存储换行
- 14. 转换charfield串的Django
- 15. 没有空字符串的Django CharField
- 16. Charfield必须与另一个Charfield Django的表单验证匹配
- 17. Flash TextField vs Starling TextFiled
- 18. Django - 管理:list_display TextField
- 19. 模型中Django Textfield的合适性
- 20. Django的formfield_overrides与MAX_LENGTH在TextField中
- 21. Django URL基于charfield与空格?
- 22. Mongo使用Django的max_length问题CharField
- 23. 的Django模型CharField抛出INT()错误()
- 24. django模型不区分大小写Charfield
- 25. Django的查询集计算子在charField
- 26. Django模型:CharField与选择属性
- 27. Django South - 将CharField更改为ForeignKey
- 28. 没有最大长度的Django CharField
- 29. (Django)修改charField中的空格
- 30. 输出Django Charfield作为响应Bootstrap textarea
反过来说,如果你使用CharField,那么你*必须*有最大长度 –
我发现默认情况下使用'TextField'会影响你的应用程序的可移植性。 Postgres可能没有性能问题,但Oracle会将它存储为一个'CLOB',它有一些烦恼,就像不能在WHERE语句中使用该字段。只是需要考虑。 – Rob
还应该考虑在Oracle中'CharField'不能具有大于2000的'max_length',或者它会发出一个'ORA-00910:指定的长度太长的数据类型'错误。 – Dinei