会员

贴心博客(Imblog)

基于`Imcat(贴心猫)+(微样式)Weys`开发

mysql中varchar能存多少汉字、数字,以及varchar(100)和varchar(10)的区别

2021-02-16 21:13 学习

mysql中varchar能存多少汉字、数字,以及varchar(100)和varchar(10)的区别
https://www.cnblogs.com/zhuyeshen/p/11642211.html

###、varchar能存多少汉字、数字?

具体还是要看版本的,一个字符占用3个字节   ,一个汉字(包括数字)占用3个字节=一个字符

4.0版本以下,varchar(100),指的是100字节,如果存放UTF8汉字时,只能存33个(每个汉字3字节)
5.0版本以上,varchar(100),指的是100字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放100个。

UTF8编码中一个汉字(包括数字)占用3个字节
GBK编码中一个汉字(包括数字)占用2个字节

###、varchar的最大长度是多少呢?

mysql的vachar字段的类型虽然最大长度是65535,但是并不是能存这么多数据,最大可以到65533,其中需要1到2个字节来存储数据长度(如果列声明的长度超过255,则使用两个字节来存储长度,否则1个)字节,当不允许非空字段的时候(因为要用一个字节来存储不可为空的标识),当允许非空字段的时候只能到65532(省下了存储非空的那个字节)。

行中可以用的字节数如下计算:(参考文档:https://www.jianshu.com/p/ee1e4b14c5e7 )
字段非空时候:varchar(65535) -2 bytes (存储长度,按2个算) - 1byte (latin1类型) - 1 (null byte)=65531 字节可以用
减1的原因是实际行存储从第二个字节开始';
字段可以空时候:varchar(65535) -2 bytes (存储长度,按2个算) - 1byte (latin1类型) =65532 字节可以用

根据这个最大字节数,以及编码方式,可以计算能存储的汉字数。

###、总结

1、从碎片角度进行考虑,使用CHAR字符型时,由于存储空间都是一次性分配的。为此某个字段的内容,其都是存储在一起的。单从这个角度来讲,其不存在碎片的困扰。而可变长度的字符数据类型,其存储的长度是可变的。当其更改前后数据长度不一致时,就不可避免的会出现碎片的问题。故使用可变长度的字符型数据时,数据库管理员要时不时的对碎片进行整理。如执行数据库导出导入作业,来消除碎片。

2、考虑其长度的是否相近,如果某个字段其长度虽然比较长,但是其长度总是近似的,如一般在90个到100个字符之间,甚至是相同的长度。此时比较适合采用CHAR字符类型。比较典型的应用就是MD5哈希值。当利用MD5哈希值来存储用户密码时,就非常使用采用CHAR字符类型。因为其长度是相同的。另外,像用来存储用户的身份证号码等等,一般也建议使用CHAR类型的数据。

另外请大家考虑一个问题,CHAR(1)与VARCHAR(1)两这个定义,会有什么区别呢?虽然这两个都只能够用来保存单个的字符,但是VARCHAR要比CHAR多占用一个存储位置。这主要是因为使用VARCHAR数据类型时,会多用1个字节用来存储长度信息。这个管理上的开销char字符类型是没有的。


来源:(原创) 编辑:peace 关键词:

    More 心情墙

  • 70 不想授权的伙伴,你也多了一条免费之路 ---`贴心博客(Imblog)`!
  • 14 尊重版权,没有任何借口:支持织梦授权。
  • 8 某镇教育网[2007] vs [2021]某校教育平台; 一个成功的作品,和一个成功的项目管理过程,是完全两回事。
  • 9 计划不如变化;说好的[下午]开会,却有意安排到[晚上]。
  • 有所为,有所不为,是为华为! 凝心聚力,中华有为!

    22 2019-06-02

  • 2019愿望: 1.多健身少生病;2.学习英语,心理学;3.发布`贴心博客`,`贴心企业网`,`贴心房产网`(部分合作开发)...

    27 2018-12-31

  • 愿与[企业,客户]三方利益达到最佳平衡!

    4 2018-12-16

    More 和平鸽小语

  • 4 业余系统,开源分享;从未忘记,初心梦想。
  • 3 中国年=人民币: Happy CNY, I get a CNY 8.8 red envelope. 慢慢去体会,用一生去体会!
  • 2 2019:经济危机后;Android,鸿蒙,iOS将三足鼎立 想起:非暴力不合作;该赶美企,抵美货了...
  • 6 修桥、修路、修房子,已经习惯了,只要砸钱就行了; 这个芯片砸钱不行的,得砸数学家、物理学家、化学家... (任正非)
导航
博客文章
便笺墙
家族亲友树
联系我们
地址:银河县太阳镇地球村
电话:135-37****47
邮箱:80893510@qq.com

Copyright@贴心博客(Imblog)

Run:6.450/46.320(ms); 6(sql)/2.1(MB); comm:info/detail; Upd:2021-10-23 06:24:03