存储引擎存储CHAR或者VARCHAR值的方式在内存中和在磁盘上可能不一样,所以MYSQL服务器从存储引擎读出的值可能需要转换为另一种存储格式

VARCHARvarchar类型用于存储可变长字符串。比定长类型更节省空间,因为它仅使用必要的空间。有一种情况例外,如果Mysql表使用ROW_FORMAT=FIXED创建的话,每一行都会使用定长存储,这会很浪费空间

VARCHAR需要使用1或2个额外字节记录字符串的长度:如果列的最大长度小于或等于255,则使用1个字节表示,否则使用两个2节.VARCHAR节省了存储空间,所以对性能也有帮助。但是,由于行是变长的,在UPDATE时可能使行变得比原来长,这就导致需要做额外的工作。如果一个行占用的空间增长,并且在页内没有更多的空间可以存储,在这种情况下,不同的存储引擎的处理方式是不一样的。例如,MyISAM会将行拆成不同的片段存储,InnoDB则需要分裂页来使行可以放进页内。下面这些情况下使用VARCHAR是合适的:字符串列的最大长度比平均长度大很多;列的更新很少,所以碎片不是问题;使用了像UTF-8这样复杂的字符集,每个字符都使用不同的字节数进行存储。在5.0或更高版本,MYSQL在存储和检索时会保留末尾空格

CHARchar类型是定长的:MySql总是根据定义的字符串长度分配足够的空间。当存储CHAR值是,MYSQL会删除所有的末尾空格。CHAR值会根据需要采用空格进行填充以方便比较。CHAR适合存储很短的字符串,或者所有值都接近同一个长度。例如,CHAR非常适合存储密码的MD5值,因为这是一个定长的值。对于经常变更的数据,CHAR比VARCHAR更好,因为定长的CHAR类型不容易产生碎片。。对于非常短的列,CHAR比VARCHAR在存储空间上也更有效率。例如用CHAR(1)来存储只有Y和N的值,如果采用单字符集只需要1个字节,但是VARCHAR(1)却需要两个字节,因为还有一个记录长度的额外字节。

慷慨是不明智的,使用VARCHAR(5)和VARCHAR(200)存储’hello’的空间开销是一样的,那么使用更短的列又什么优势吗?

事实证明有很大的有时。更长的列会消耗更多的内存,因为MYSQL通常会分配固定大小的内存块保存内部值。尤其是使用内存临时表进行排序或操作时会特别糟糕。在利用磁盘临时表进行排序时也同样糟糕

mysql 中varchar_MYSQL中VARCHAR和CHAR类型相关推荐

  1. MySQL数据库中如何选择VARCHAR和CHAR类型

    首先,VARCHAR和CHAR是两种最主要的字符串类型.在设计用于存储字符串的表字段时,可能会对到底选哪个类型有所犹豫,确实如果不了解它们之间的区别,选择上是不会那么容易,本篇将详细介绍它们之间的区别 ...

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

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

  3. mysql中char和text的区别_mysql中text与varchar与char的区别

    char类型 CHAR列的长度固定为创建表时声明的长度.长度可以为从0到255的任何值.当保存CHAR值时,在它们的右边填充空格以达到指定的长度.当检索到CHAR值时,尾部的空格被删除掉.在存储或检索 ...

  4. MySQL varchar和char类型

    varchar和char是两种最主要的字符串类型.不幸的是,很难精确地解释这些值是怎么储存在磁盘和内存中的,因为这根存储引擎的具体实现有关.下面的描述假设使用的存储引擎是InnoDB或者MyISAM. ...

  5. MySQL——VARCHAR和CHAR类型

    前述 VARCHAR和CHAR是两种最主要的字符串类型.不幸的是,很难精确地解释这些值是怎么存储在磁盘和内存中的,因为这跟存储引擎的具体实现有关.下面的描述假设使用的存储引擎是InnoDB和/或者My ...

  6. char在python中什么意思_C语言-char 类型基本概念

    char类型的变量在内存中是如何存储的呢? char 是占一个字节的 int num; char charValue; printf("num 的内存地址%p\n",&nu ...

  7. VARCHAR和CHAR类型使用场景

    目录 varchar char VARCHAR(5)与VARCHAR(200)的区别 总结 varchar VARCHAR类型用于存储可变长字符串,是最常见的字符串数据类型.它比定长类型更节省空间,因 ...

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

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

  9. mysql的char占几个字节_mysql varchar和char类型在不同字符集下的字符数和字节数计算...

    场景一:CHAR(30)的最大字符数和最大字节数计算 1.CHAR(30)在UTF-8字符集下计算最大字符数和最大字节数 (product)root@localhost [test]> show ...

最新文章

  1. iOS常用第三方开源框架和优秀开发者博客等
  2. UVA572 Oil Deposits DFS求解
  3. mysql源码安装报错_mysql 的二进制和源码包 安装的报错总结
  4. c mysql 异步查询_C#Mysql – 使用锁在数据库上查询异步等待服务器
  5. DPDK在Linux用户级执行环境中执行EAL
  6. 项目中出现specify @BootstrapWith‘s ‘value‘ attribute or make the default bootstrapper class avail
  7. Confluence 6 SQL Server 数据库驱动修改
  8. android java文件_android 项目下文件的作用
  9. 10g gtx 光纤通信测试_光纤通信optisystem实验
  10. PDF文件打开密码解密
  11. Java上传文件格式判断
  12. 笔划码、五笔码、拼音码软键盘中文输入
  13. django项目内部的views层判断手机访问还是电脑访问
  14. 用SSD也是一种性能提升手段
  15. 本科学历马斯克当选美国工程院院士!张宏江、萨蒂亚:“我们都有美好的未来”...
  16. UI-网页设计-色彩搭配
  17. 淘宝API接口 upload_img - 上传图片到淘宝
  18. 英语基础-倒装句型·部分倒装
  19. 5.7亿巨奖质疑风暴
  20. 2010年开始啦,总结PICCH_09年工作

热门文章

  1. SpringBoot 异常回滚 事务的使用___Springboot @Transactional 事务不回滚
  2. mybatis中的#{}和${}区别,和使用场景
  3. boost互斥锁_boost锁使用总结
  4. aqs clh java_【Java并发编程实战】----- AQS(一):简介
  5. bs4 乱码_Python BeautifulSoup中文乱码问题的2种解决方法
  6. Java常用设计模式————建造者模式
  7. function函数嵌套 matlab_Matlab函数进阶:使用匿名函数和内嵌函数处理多变量传递问题...
  8. oracle面向对象的数据类型,Oracle面向对象编程OOP
  9. robot 用AP连PC
  10. 泰拉瑞亚服务器config修改,泰拉瑞亚配置怎么修改_泰拉瑞亚配置修改方法介绍...