Django 之 CharField 和 TextField
创始人
2024-05-30 03:29:18
0

CharField

test_char = models.CharField(max_length=288)

 设置长度为 288 并不会报错,这取决于你的数据库后端,mysql char 类型长度为 255,django 里面设置超过 255 并不会有提示,个人感觉有点误导人,起码给个警告也行,但是在插入数据时,字节数大于 255 会提示:django.db.utils.DataError: (1406, "Data too long for column 'test_char' at row 1"),注意这里不是字符的长度,而是字节长度。
在 Python 中,不同的字符所占的字节数不同,数字、英文字母、小数点、下划线以及空格,各占一个字节,而一个汉字可能占 2~4 个字节,具体占多少个,取决于采用的编码方式。例如,汉字在 GBK/GB2312 编码中占用 2 个字节,而在 UTF-8 编码中一般占用 3 个字节。
如何测试字节长度和字符长度:

str1 = "人生苦短,我用Python"
len(str1)
13
len(str1.encode('utf-8'))
27
len(str1.encode('gbk'))
20

注意:CharField 类型会强制校验 max_length,所以参数必填,在官方文档中解释到:一个长度CHAR列被固定在创建表声明的长度。长度可以是 0 到 255 之间的任何值。CHAR 存储值时,它们会用空格右填充到指定的长度。当CHAR被检索到的值,拖尾的空格被删除,除非 PAD_CHAR_TO_FULL_LENGTH启用SQL模式。所以如果长度设置的过大但实际用时却存储很少的数据时对数据库也是一种压力。

TextField

test_char = models.TextField(max_length=288)

存储长度可以为 0 到 65,535 之间的值,也是字节数,存储方式和 char 类型稍微不同,TextField 因为可以存储短数据和长数据,所以在存储时稍有不同,VARCHAR值存储为 1 字节或 2 字节长度的前缀加数据。长度前缀表示值中的字节数。如果值需要不超过 255 个字节,则列使用一个长度字节,如果值可能需要超过 255 个字节,则使用两个长度字节。
但是需要注意的是,在不同的数据库后端,如果存储的字节数真的符合 65,535 ,那么也会存在一个问题,在 mysql 官方解释中,如果 sql 的包大于 4 M, 也会抛出异常:django.db.utils.OperationalError: (2013, 'Lost connection to MySQL server during query ([WinError 10053] 你的主机中的软件中止了一个已建立的连接。)'),此时要修改 max_allowed_packet 配置, 默认为 4M

总结


长度的区别,CharField 范围是0~255, TextField 最长是64k(65,535 bytes)
效率来说基本是 CharField > TextField
CharField 必须传入 max_length,另一个场景用于在 modelform 中使用,TextField 可以不传参数
选取类型时可以结合已下场景来考虑:

该字段数据集的平均长度与最大长度是否相差很小,若相差很小优先考虑CHAR类型,反之,考虑VARCHAR类型。
若字段存储的是MD5后的哈希值,或一些定长的值,优先选取CHAR类型。
若字段经常需要更新,则优先考虑CHAR类型,由于CHAR类型为定长,因此不容易产生碎片。
对于字段值存储很小的信息,如性别等,优先选取CHAR类型,因为VARCHAR类型会占用额外的字节保存字符串长度信息

相关内容

热门资讯

求关于女生寝室的鬼片 求关于女生寝室的鬼片RT~~~~要好看的首选女高怪谈系列,第一部年代久远了些,但是看看无妨,第二部和...
有个修仙小说里,有个诗意的情诗... 有个修仙小说里,有个诗意的情诗。大概意思是有了什么才有什么,几个句子。有人知道嘛?最近总是反反复复的...
贺锦兮顾西城是什么小说 贺锦兮顾西城是什么小说贺锦兮顾西城是《代嫁甜妻》小说。《代嫁甜妻》是香网著名作家明月西所著的总裁类型...
邓泽元的南昌大学教授 邓泽元的南昌大学教授学历简况1981年9月考入江西农业大学畜牧兽医系,1985年获学士学位,同年留江...
造船的介绍 造船的介绍造船是指建造或制造船只的生产工业,一般是在一种专业设施造船厂里的船台或船坞中进行。造船本身...
帝凰之神医弃妃拍成电视剧了吗 帝凰之神医弃妃拍成电视剧了吗不希望是刘诗诗演女主 感觉她演不出来那种感觉没影的事呢!哪来的电视剧女主...
银河帝国16岁能看吗? 银河帝国16岁能看吗?银河帝国16岁,可不可以看一般的话未成年是不能看这种电影的?因为这种太暴力,血...
怎么成为神? 怎么成为神?`哈`反应好激烈啊`我开玩笑滴`神是故事里的人物,要成为神有两种方法,第一是修炼得道成神...
踽踽独行什么意思 踽踽独行解释 踽踽独行什么意思 踽踽独行解释1、踽踽独行,汉语成语,拼音是jǔ jǔ dú xíng,意思是孤零零...
谁有神医小农民炊饼哥哥406章 谁有神医小农民炊饼哥哥406章可以啊。。。。
请问开洗脚城需要办哪些手续? 请问开洗脚城需要办哪些手续?到工商部门咨询就知道了
佛弟子如何向大众弘扬佛法 佛弟子如何向大众弘扬佛法一、财布施:分内财、外财。譬如布施你的体力,帮别人劳动就是内财布施;布施掉你...
2022闺蜜文案短句 2022闺蜜文案短句2022闺蜜文案短句(精选68句) 1.不忘初心,方能始终。十年之约,四叶绽放,...
对联如何押韵 对联如何押韵对联如何押韵对联不用押韵。只要满足对联六相即可。六相中并无押韵要求。对联六相:字数相等,...
大象伯伯过生日,请来了狮子,小... 大象伯伯过生日,请来了狮子,小熊,小猫,大象会买什么招待大家大象伯伯会给狮子买牛奶(不能给他买肉 否...
谁知道有这样一本小说女主叫花未... 谁知道有这样一本小说女主叫花未央,男主姓帝女主是重生重生之前和男主有个儿子女主重生之前有个姓诸葛的纯...
花火中的小说念念不忘叫什么 花火中的小说念念不忘叫什么不就是念念不忘吗如若有你,一世欢喜?老婆大人有点冷诶,你说的是不是最新里的...
讲的就是女主是魔法师,穿越到古... 讲的就是女主是魔法师,穿越到古代成为不受宠的公主,和哥哥还有外公在外面生活,后来代替哥哥到邻国当人质...
无心法师为什么被禁播 无心法师为什么被禁播大概是因为涉及到妖魔鬼怪吧宣扬封建迷信吧。没有被禁播,还是可以看到的。《无心法师...
生孩子是艰辛的事吗? 生孩子是艰辛的事吗?我们经常会听到很多人都说女生生孩子是非常艰辛的事情。可能一开始大部分的女生没有经...