• Mysql 的char 和varchar的的区别


    1、char 和varchar 区别

    下面以utf8字符集为例,char和varchar的占比计算,如下图
    valueChar(5)bytesVarchar(5)bytesVarchar(100)bytes
    ‘’‘   ’15‘’1‘’1
    ‘abcd’‘abcd ’15‘abcd’13‘abcd’13
    'abcde''abcde'15'abcde'16'abcde'16

            varchar使用额外的1到2字节来存储值得长度。如果列的最大长度小于或等于255,则使用1字节,否则使用2字节。以utf8字符集举例,即一个字符占用3个字节,N理论上能取到的值是(65535-2)/3=21844 。char(1)字符串对于单字节字符来说只会占用1个字节,但是varchar(1)会占用2个字节,其中1个字节用来存储长度信息。

         使用varchar(5)和varchar(100)保存‘abcde’占用的空间虽然都一样,但越大的
    列会使用越多的内存,因为MySQL通常会分配固定大小的内存块来保存值。简单的
    说,就是使用字符类型中定义的长度,即100个字符空间。所以如果你的MySQL内存
    占用过高也有可能是因为返个原因,如基亍排序、使用基亍内存的临时表等等,磁盘
    I/O也会激增。所以在使用varchar的时候一定要分配刚好就行。

         从碎片角度迕行考虑,使用CHAR字符型时,由亍存储空间都是一次性分配的。为此
    某个字段的内容,其都是存储在一起的。单从返个角度来讲,其丌存在碎片的困扰。
    而可变长度的字符数据类型,其存储的长度是可变的。当其更改前后数据长度丌一致
    时,就丌可避免的会出现碎片的问题。故使用可变长度的字符型数据时,时丌时的对
    碎片迕行整理。如执行数据库导出导入作业,来消除碎片。

    2、怎么选择char 还是varchar

      char最佳的使用方案就是 存储很短的字符串戒者长度近似相同的字符串的时候非常有用。如固定长度的MD5、 定长值、短网址,存储用户的身份证号码、性别等等。其他的场景建议用varchar
  • 相关阅读:
    BST搜索二叉树
    凉鞋的 Unity 笔记 101. Hello Unity
    牛客刷题<23>ROM的简单实现
    [附源码]java毕业设计商城管理系统
    Spring Security: 整体架构
    ImportError: /lib/libgdal.so.26: undefined symbol: sqlite3_column_table_name
    WebSocket开发(客服对话)功能
    设计模式系列详解 -- 建造者模式
    深度学习GPU服务器环境配置
    mybatis中Insert如何返回主键呢?
  • 原文地址:https://blog.csdn.net/fangxiang2008/article/details/138158918