为什么80%的码农都做不了架构师?>>>   

1、限制规则

字段的限制在字段定义的时候有以下规则:

a)                  存储限制

varchar 字段是将实际内容单独存储在聚簇索引之外,内容开头用1到2个字节表示实际长度(长度超过255时需要2个字节),因此最大长度不能超过65535。

b)                  编码长度限制

字符类型若为gbk,每个字符最多占2个字节,最大长度不能超过32766;

字符类型若为utf8,每个字符最多占3个字节,最大长度不能超过21845。

若定义的时候超过上述限制,则varchar字段会被强行转为text类型,并产生warning。

c)                   行长度限制

导致实际应用中varchar长度限制的是一个行定义的长度。 MySQL要求一个行的定义长度不能超过65535。若定义的表长度超过这个值,则提示

ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs。

2、计算例子

举两个例说明一下实际长度的计算。

a)                  若一个表只有一个varchar类型,如定义为

create table t4(c varchar(N)) charset=gbk;

则此处N的最大值为(65535-1-2)/2= 32766。

减1的原因是实际行存储从第二个字节开始’;

减2的原因是varchar头部的2个字节表示长度;

除2的原因是字符编码是gbk。

b)                  若一个表定义为

create table t4(c int, c2 char(30), c3 varchar(N)) charset=utf8;

则此处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”了。

使用varchar(5)和varchar(200)存储‘hello’的空间开销是一样的,那么使用更短的列有什么优势吗?

事实证明有很大的优势。更长的列会小号更多的内存,因为MySQL通常会分配固定大小的内存块来保存内部值。尤其是在使用内存临时表

进行排序或操作时会特别糟糕。在利用磁盘临时表进行排序时也同样糟糕。

所以最好的策略是只分配真正需要的空间。

转载于:https://my.oschina.net/wxpi/blog/887342

数据库的varchar长度的限制以及对性能是否有影响相关推荐

  1. mysql varchar 长度限制_MySQL数据库varchar的限制规则说明

    MySQL数据库中varchar最大长度是多少?其实这不是一个固定的数字,varchar的长度是有限制规则的.本文我们就来介绍一下MySQL数据库中varchar的限制规则,并以一个实际的例子对限制规 ...

  2. 数据库中varchar类型 最大长度是多少?

    一. varchar存储规则: 4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节)  5.0版本以上,varchar(20),指的是20字符, ...

  3. mediumtext和string转换_数据库用varchar和text的差别

    数据库用varchar和text的差别 发布时间:2018-05-09 20:41, 浏览次数:1268 , 标签: varchar text 最近有几个同学问我varchar和text有啥别吗,这个 ...

  4. MySQL学习笔记_关于MySQL的字符类型VARCHAR长度知识总结

    MySQL学习笔记_关于MySQL的字符类型VARCHAR长度知识总结 一.VARCHAR存储和行长度限制 1.VARCHAR(N)中,N指的是字符的长度,VARCHAR类型最大支持65535,指的是 ...

  5. numeric转换varchar_数据库中varchar类型数据转换为numeric类型

    关于数据库中varchar/nvarchar类型数据的获取注意事项 当在页面后台获取数据库表中某字段的数据时,需注意该数据的类型.防止因实际数据的字符长度因达不到指定数据类型规定的字符长度而导致空格的 ...

  6. mysql数据库:varchar类型可以存储多少个汉字,多少个数字

    在设计数据库的时候会考虑给字段设置什么类型,设置多少长度合适,之前一直认为varchar(2)可以存储一个汉字,或者一个数字,通过今天无意间的查询,发现了这个错误,来记下来 其实varchar类型可以 ...

  7. mysql 数据库中varchar的存储单位是什么

    一.先了解字节与字符 字节(Byte)是计量单位,表示数据量多少,是计算机信息技术用于计量存储容量的一种计量单位,通常情况下一字节等于八位. 字符(Character)计算机中使用的字母.数字.字和符 ...

  8. MySQL的varchar长度问题

    https://www.cnblogs.com/joeblackzqq/p/4633862.html From: http://blog.csdn.net/longyulu/article/detai ...

  9. java String长度与varchar长度匹配理解(字符和字节长度理解)

    java String长度与varchar长度匹配理解(字符和字节长度理解) string中的length()长度,返回的是char的数量,每个char可以存储世界上任何类型的文字和字符,一个char ...

  10. mysql设置varchar_MySql中varchar长度的设置问题

    根据自己多年的工作经验,特别是在接收旧的项目时,varcahr的长度设置有不同的风格,针对varchar长度的设置问题,自己划分了不同的门派. 1.强迫症派:长度设置为4或者8的倍数,达到内存对齐的目 ...

最新文章

  1. .Net 文件流 System.IO之Stream
  2. 矩阵元素求积及其矩阵元素的差分
  3. python基础7 (来自廖雪峰的官方网站)
  4. php+mysql+html 之页面输入、输出
  5. 【原】Asp.net生成Excel文件并下载(更新:解决使用迅雷下载页面而不是文件的问题)...
  6. linux crontab 每隔10秒执行一次
  7. linux 网络配置 阮一峰,Vim 配置入门
  8. window.open 和showModalDialog的返回值
  9. java 中缀算术表达式转换成后缀表达式_求Java堆栈,将中缀算术表达式转换成后缀表达式。...
  10. 梅宫主:聊聊创业路上关于韭菜的事儿。。
  11. log算子 和dog 算子
  12. 中国广电即将放号,感受到压力的中国移动率先推出19元5G套餐
  13. 用PS修改GIF动图循环播放次数
  14. OpenLayers 3实践与原理探究1-ol2 VS ol3
  15. 蓝牙耳机什么牌子好?安卓蓝牙耳机性价比推荐
  16. 隐藏win10任务栏输入法M图标
  17. 哪个软件能准确测试人脸,人脸识别软件哪个好?人脸识别软件推荐2020
  18. Spring学习【2】
  19. 百度智能云 x 华栖云 | 媒体智能化探路者
  20. 尚德SEP英语测试被部分国际高校认可为本硕入学测试

热门文章

  1. Struts2的Action访问Session对象的两种方式及原理
  2. 初入职场,你够聪明不?
  3. EGLImage使用记录
  4. linux内核之同步
  5. DPDK QOS4 -- PORT数据结构的初始化
  6. 多网卡配置同一网段IP情况解析
  7. Ubuntu16.04 安装Tensorflow-CPU
  8. 三、后台实战——用户登录之JWT
  9. 总结一下linux中的分段机制
  10. 最长上升子序列(LIS)和最长公共子序列(LCS) 模板