首页 文章

Django CharField vs TextField

提问于
浏览
226

Django中 CharField()TextField() 有什么区别? documentation表示 CharField() 应该用于较小的字符串, TextField() 应该用于较大的字符串 . 好的,但"small"和"large"之间的线条在哪里?引擎盖下发生的事情就是这样的情况?

4 回答

  • 25

    例如, . 在下面的模型中添加了2个字段 .

    description = models.TextField(blank=True, null=True)
    title = models.CharField(max_length=64, blank=True, null=True)
    

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

    for TextField (description)该字段被定义为 longtext

    ALTER TABLE `sometable_sometable` ADD COLUMN `description` longtext NULL;
    

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

    for CharField (title)max_length(必需)定义为 varchar(64)

    ALTER TABLE `sometable_sometable` ADD COLUMN `title` varchar(64) NULL;
    ALTER TABLE `sometable_sometable` ALTER COLUMN `title` DROP DEFAULT;
    
  • 263

    它's a difference between RDBMS' s varchar (或类似) - 通常以最大长度指定,并且在性能或存储方面可能更有效 - 以及 text (或类似)类型 - 这些通常仅受硬编码实现限制(不是数据库架构) .

    具体而言,PostgreSQL 9表示"There is no performance difference among these three types",但AFAIK在例如MySQL,所以这是要记住的事情 .

    一个好的经验法则是,当您需要限制最大长度时使用 CharField ,否则为 TextField .

    这也不是特定于Django的 .

  • 5

    在某些情况下,它与场的使用方式有关 . 在某些数据库引擎中,字段差异决定了您在字段中搜索文本的方式(以及是否) . CharFields通常用于可搜索的内容,例如,如果要在字符串“one plus two”中搜索“one” . 由于字符串较短,因此引擎搜索时间较短 . TextFields通常不是要搜索(可能是博客的主体),而是意味着要容纳大量的文本 . 现在大部分都取决于数据库引擎和Postgres一样,没关系 .

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

  • 6

    CharField 的max_length为 255 个字符,而 TextField 的字符数超过 255 . 当您有一个大字符串作为输入时,请使用 TextField . 很高兴知道当 max_length 参数传递到 TextField 时,它将长度验证传递给 TextArea 小部件 .

相关问题