区别一,定长和变长


char 表示定长,长度固定,varchar表示变长,即长度可变
当所插入的字符串超出它们的长度时,视情况来处理,如果是严格模式,则会拒绝插入并提示错误信息,如果是宽松模式,则会截取然后插入。如果插入的字符串长度小于定义长度时,则会以不同的方式来处理,如char(10),表示存储的是10个字符,无论你插入的是多少,都是10个,如果少于10个,则用空格填满。而varchar(10),小于10个的话,则插入多少个字符就存多少个。varchar怎么知道所存储字符串的长度呢?实际上,对于varchar字段来说,需要使用一个(如果字符串长度小于255)或两个字节(长度大于255)来存储字符串的长度。

区别之二,存储的容量不同


对char来说,最多能存放的字符个数 255,和编码无关。
而varchar呢,最多能存放 65532 个字符。
VARCHAR的最大有效长度由最大行大小和使用的字符集确定。整体最大长度是65,532字节
最大有效长度是 65532 字节,在varchar存字符串的时候,第一个字节是空的,不存任何的数据,然后还需要两个字节来存放字符串的长度。所以有效长度就是 65535 - 1 - 2 = 65532
由字符集来确定,字符集分单字节和多字节
Latin1一个字符占一个字节,最多能存放  65532个字符
GBK 一个字符占两个字节, 最多能存 32766 个字符
UTF8一个字符占三个字节, 最多能存 21844 个字符
注意,char和varchar 后面的长度表示的是字符的个数,而不是字节数。

两相比较,char的效率高,没有碎片,尤其更新比较频繁的时候,方便数据文件指针的操作。但不够灵活,在实际使用时,应根据实际需求来选用合适的数据类型。

相关题目:若一个表定义为create table t1(c int, c2 char(30), c3 varchar(N)) charset=utf8; 问N的最大值又是多少?(65535 - 1 - 2 - 4 - 30 * 3 )/3 (字符)
减4的原因是int类型的c占4个字节;减30*3的原因是char(30)占用90个字节,编码是utf8。

MySQL要求varchar一个行的定义长度不能超过65535。若定义的表长度超过这个值,并产生warning。并被强转成text类型。

在MySQL中用来判断是否需要进行对据列类型转换的规则

1、在一个数据表里,如果每一个数据列的长度都是固定的,那么每一个数据行的长度也将是固定的.

2、只要数据表里有一个数据列的长度的可变的,那么各数据行的长度都是可变的.

3、如果某个数据表里的数据行的长度是可变的,那么,为了节约存储空间,MySQL会把这个数据表里的固定长度类型的数据列转换为相应的可变长度类型.例外:长度小于4个字符的char数据列不会被转换为varchar类型

MySQL中varchar最大长度是多少?这不是一个固定的数字。本文简要说明一下限制规则。

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

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

编码长度限制
字符类型若为gbk,每个字符最多占2个字节,最大长度不能超过32766;
字符类型若为utf8,每个字符最多占3个字节,最大长度不能超过21845。
若定义的时候超过上述限制,则varchar字段会被强行转为text类型,并产生warning。
 
行长度限制
导致实际应用中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。

varchar和char区别相关推荐

  1. postgresql数据库varchar、char、text的比较

    https://blog.csdn.net/u013992330/article/details/76653361/ postgresql数据库varchar.char.text的比较 2017年08 ...

  2. mysql in varchar_MySQL中char和varchar有啥区别?优缺点是啥?

    在mysql教程中char与varchar的区别呢,都是用来存储字符串的,只是他们的保存方式不一样罢了,char有固定的长度,而varchar属于可变长的字符类型. char与varchar的区别 c ...

  3. char、varchar、varchar2区别

    区别: 1.CHAR的长度是固定的,而VARCHAR2的长度是可以变化的, 比如,存储字符串"abc",对于CHAR (20),表示你存储的字符将占20个字节(包括17个空字符), ...

  4. MySQL中的char和varcharmysql中varchar能存多少汉字、数字,以及varchar(100)和varchar(10)的区别

    1.varchar能存多少汉字.数字? 具体还是要看版本的,一个字符占用3个字节 ,一个汉字(包括数字)占用3个字节=一个字符 4.0版本以下,varchar(100),指的是100字节,如果存放UT ...

  5. varchar和char的区别

    1.char(n)和varchar(n)中括号中n代表字符的个数,并不代表字节个数,所以当使用了中文的时候(UTF8)意味着可以插入m个中文,但是实际会占用m*3个字节.即,n限制了存储多长的值,但是 ...

  6. 【038】MySQL中varchar与char的区别以及varchar(50)中的50代表的涵义?

    ♣题目部分 MySQL中varchar与char的区别以及varchar(50)中的50代表的涵义? ♣答案部分 (1).varchar与char的区别区别一,定长和变长char 表示定长,长度固定, ...

  7. mysql char30_Mysql中varchar与char的区别以及varchar(30)中的30代表的涵义

    mysql中varchar与char的区别以及varchar(30)中的30代表的涵义 (1)varchar与char的区别 varchar存储可变长字符串,小于255字节时需要1个额外字节(大于25 ...

  8. MySQL中varchar与char的区别以及varchar(50)中的50代表的涵义?

    (1).varchar与char的区别区别一,定长和变长     char 表示定长,长度固定,varchar表示变长,即长度可变.char如果插入的长度小于定义长度时,则用空格填充:varchar小 ...

  9. 面试积累-MySQL-MySQL中varchar与char的区别以及varchar(50)中的50代表的涵义?

    varchar 与 char 的区别: char 是一种固定长度的类型,varchar 则是 一种可变长度的类型. varchar(50)中 50 的涵义 : 最多存放 50 个字节 int(20)中 ...

最新文章

  1. Java: 面向对象程序设计(上)
  2. 2016年春季计算机应用基础,东北师范2016年春季《计算机应用基础》期末考核
  3. 自动化Debias框架,一键去除推荐系统所有Bias
  4. cad2016中选择全图字体怎么操作_打开CAD图纸字体丢失、重新选择怎么办?这样设置,一辈子用的到...
  5. 飞行模式的开启和关闭
  6. 与时间相关NSCalendar、NSDate类的基本使用
  7. 基于shiro实现session持久化和分布式共享
  8. java正则匹配双字节_Java 正则表达式详解(二)
  9. Opengl1.1绘图之GL_COLOR_LOGIC_OP
  10. python数据可视化:使用dash给博客制作一个dashboard
  11. Ubuntu升级Ruby
  12. 如何拼局域网所有ip_在windows命令行批量ping局域网内IP
  13. Ubuntu系统直接拷贝硬盘克隆
  14. 如何把团队带成一盘散沙?
  15. 计算机视觉之目标检测(object detection)《1》
  16. CSP201912-3化学方程式
  17. 明明是那么好的人,却又是那么伤人的人
  18. linux网络连接红叉号,win10能上网,但右下角宽带连接图标显示红叉的解决方法
  19. android10管理权限,Android 权限管理
  20. 新月开始了-不解之谜也开始了

热门文章

  1. 【rotors】多旋翼无人机仿真(四)——参数补偿和PID控制
  2. 【Android 你的SurfaceView休眠了吗】
  3. (私人收藏)2019WER积木教育机器人赛(普及赛)解决方案-(全套)获取能源核心...
  4. 二维数组名取地址加一
  5. C语言——PTA 用格里高利公式求给定精度的PI值
  6. CAS,ReentrantLock和synchronized总结
  7. GAN-生成对抗网络(Pytorch)合集(2)--pixtopix-CycleGAN
  8. 可穿戴式柔性电子应变传感器基底材料
  9. js控制屏幕双屏显示
  10. TSF(Text Service Framework)简介