mysql 5.7中varchar 和 char的理解

1 篇文章 0 订阅

做数据库设计,偶然间研究了一下varchar 和char  这两个东东  对于我这种渣渣连二进制字节都不懂的人理解起来还挺费劲,不过功夫不负有心人  理论上的知识从网上看的翻看了好多文章有的文章真是误人子弟,先说一下核心的在带点理论  ,核心的是我亲自试验出来的



mysql中varchar(255)括号中的255代表限制长度255个字节  这个()中如果是utff8 编码的 最多可以写为21843(不能为空) 可以存21843个中文数字英文符号  这个是这么计算的  允许最大长度为65535但是utf8就要÷3,因为utf8一个字符占3个字节,  得到21845  当长度设置超过255 mysql要用2个字符长度来作为标识,那么小于等于255也就不用研究最大值了,    所以要减去2  有的文章里写65535-2÷3貌似是不对反正我测试的是utf8编码应该是减去3个字符长度而不是3个字节长度   所以应该是先除以3再减去2 得到21843          有可能你写到括号中的时候会报错.这时一句骗子脱口而出,我就丢大人了.这时报错因为mysql中海油一个设置是   如果你允许为空  又要减去一个字符那么你只能填21842.      那么还要考虑一个问题   就是比如要是还想设置char(5)那么你还要在21843的基础上-5才能设置charr(5)   因为他是按照整行计算的     同理你再设置varchar和char也要相对减少数值才可以   



那么这里的char(5)和varchar(10)指什么呢?   varchar就是你可以最多存入英文,数字中文标点符号空格加起来10个    char(5)  是你可以最多存入英文,数字中文标点符号空格加起来5个  但是不管你存入几个 他还是占用5个字符长度  虽然你用select语句查询他也是只显示你存入的东东     那么char()括号中最大可以写255要选择无符号     如果有符号则取值范围是-127到127  



php中的strlen计算的是字节长度不是字符长度,utf下计算一个中文为3英文数字各为1    用mb_strlen函数计算相对编码格式下的字符长度   utf下计算一个中文英文数字各为1


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值