4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节)
5.0版本以上,varchar(20),指的是20字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放20个,最大大小是65532字节
1、限制规则

a) 存储限制
需要额外地在长度列表上存放实际的字符长度:小于255为1个字节,大于255则要2个字节

b) 编码限制
gbk:每个字符最多占用2个字节
utf8:每个字符最多占用3个字节

c) 长度限制
MySQL定义行的长度不能超过65535,这个限制了列的数目,比如char(255) utf8
那么列的数目最多有65535/(255*3)=85,列的数目可以从这里得到依据

行长度计算公式如下:
row length = 1
+ (sum of column lengths)
+ (number of NULL columns + delete_flag + 7)/8
+ (number of variable-length columns)
① 对于MyISAM,需要额外1个位来记录值是否为NULL;对于InnoDB,没有区别
② 对于row_format为fixed,delete_flag为1;对于row_format=dynamic,delete_flag为0

根据这个公式,我们便能够解答开头N的最大值:(65535-1-2)/3
减1是因为实际存储从第2个字节开始
减2则因为要在列表长度存储实际字符长度
除3是因为utf8编码限制

再来一道:
create table t4(c int, c2 char(30), c3 varchar(N)) charset=utf8;
N的最大值:(65535-1-2-4-30*3)/3

则此处N的最大值为 (65535-1-2-4-30*3)/3=21812

减1和减2与上例相同;

减4的原因是int类型的c占4个字节;

减30*3的原因是char(30)占用90个字节,编码是utf8。

如果被varchar超过上述的 b) 规则,被强转成text类型,则每个字段占用定义长度为11字节,当然这已经不是“varchar”了

出处:https://blog.csdn.net/u012048106/article/details/23173911

最新文章

  1. iOS获取iPhone系统等信息和服务器返回空的异常处理
  2. C# DataSet装换为泛型集合
  3. C#实现XML与DataTable互转
  4. (笔记)Linux内核学习(十一)之I/O层和I/O调度机制
  5. div垂直居中的问题
  6. Golang学习 - reflect 包
  7. 2015 FVDI V6.3 Software Free Download
  8. [原]Unity3D深入浅出 - 常见三维软件与Unity3D的单位比例
  9. 言未及之而言,谓之躁;言及之而不言,谓之隐;未见颜色而言,谓之瞽(gǔ)
  10. php 两个数组,若键相同,则值合并
  11. 基于 EntityFramework、Autofac 的 UnitOfWork 框架(一)
  12. vue-cli 最强指南
  13. phpstudy 配置端口 和 虚拟域名访问
  14. 【XSY2472】string KMP 期望DP
  15. rsync的man手册(未完成)
  16. arcgis计算邻接矩阵
  17. 【ARTS】01_08_左耳听风-20181231~20190106
  18. jquery css样式
  19. Gumbel-Softmax Trick和Gumbel分布
  20. c# 给button添加不规则的图片以及用pictureBox替代button响应点击事件

热门文章

  1. nginx随机模块——ngx_http_random_index_module
  2. shell开源跳板机sshstack
  3. 1)jquery validate 远程验证remote,自定义验证 , 手机号验证 2)bootstrap validate 远程remote验证的方法.
  4. mysql数据库负载均衡
  5. ubantu 安装nginx HTTP反向代理服务器
  6. FZU 2272 Frog 第八届福建省赛 (鸡兔同笼水题)
  7. 微软Power BI 每月功能更新系列——5月Power BI 新功能学习
  8. Spring Boot 揭秘与实战(二) 数据缓存篇 - Guava Cache
  9. Unity 3D UGUI Toggle用法教程
  10. 修改select样式