Django中 CharField()
和 TextField()
有什么区别? documentation表示 CharField()
应该用于较小的字符串, TextField()
应该用于较大的字符串 . 好的,但"small"和"large"之间的线条在哪里?引擎盖下发生的事情就是这样的情况?
Django中 CharField()
和 TextField()
有什么区别? documentation表示 CharField()
应该用于较小的字符串, TextField()
应该用于较大的字符串 . 好的,但"small"和"large"之间的线条在哪里?引擎盖下发生的事情就是这样的情况?
4 回答
例如, . 在下面的模型中添加了2个字段 .
下面是应用迁移时执行的mysql查询 .
for
TextField
(description)该字段被定义为longtext
根据string-type-overview,MySQL的最大长度
TextField
是4GB .for
CharField
(title)max_length(必需)定义为varchar(64)
它's a difference between RDBMS' s
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的多行 .
CharField
的max_length为255
个字符,而TextField
的字符数超过255
. 当您有一个大字符串作为输入时,请使用TextField
. 很高兴知道当max_length
参数传递到TextField
时,它将长度验证传递给TextArea
小部件 .