一、char和varchar的区别
char是固定长度的,而varchar会根据具体的长度来使用存储空间,另外varchar需要用额外的1-2个字节存储字符串长度。
1). 当字符串长度小于255时,用额外的1个字节来记录长度
2). 当字符串长度大于255时,用额外的2个字节来记录长度
比如char(255)和varchar(255),在存储字符串"hello world"时,char会用一块255个字节的空间放那个11个字符;而varchar就不会用255个,它先计算字符串长度为11,然后再加上一个记录字符串长度的字节,一共用12个字节存储,这样varchar在存储不确定长度的字符串时会大大减少存储空间。

二、varchar和nvarchar的区别
1. varchar(n):长度为n个字节的可变长度且非Unicode的字符数据。n必须是一个介于1和8,000之间的数值。存储大小为输入数据的字节的实际长度

2. nvarchar(n):包含n个字符的可变长度Unicode字符数据。n的值必须介于1与4,000之间。字节的存储大小是所输入字符个数的两倍。所输入的数据字符长度可以为零。

三、char和varchar的使用场景
1. 从字符长度的角度考虑:
(1). 长度较短的字段,使用char。如门牌号:101,201,...
(2). 固定长度的字段,使用char。如性别、身份证号、手机号等。(因为数据都是固定长度,varchar根据长度动态存储的特性就没作用了,而且还要占一个字节来存储长度)
(3). 字段的长度是否相近,如果某个字段其长度虽然比较长,但是其长度总是近似的,如一般在90个到100个字符之间,甚至是相同的长度。此时比较适合采用CHAR字符类型。

2. 从碎片角度考虑:
使用CHAR时,由于存储空间都是一次性分配的。从这个角度来讲,不存在碎片的困扰。而使用varchar时,因为存储的长度是可变的,当数据长度在更改前后不一致时,就不可避免地会出现碎片的问题。故使用varchar时,数据库管理员要时不时的对碎片进行整理。如执行数据库导出导入作业来消除碎片。

3. 即使使用Varchar数据类型,也不能够太过于慷慨。
虽然varchar可以自动根据长度调整存储空间,但是varchar(100)和varchar(255)还是有区别的:
假设它们都存储了90个字符的数据,那么它们在磁盘上的存储空间是相同的(硬盘上的存储空间是根据实际字符长度来分配存储空间的)。但对于内存来说,则不是这样的,内存是使用varchar中定义的长度(这里为100或255)的内存块来保存值。
所以如果某些字段会涉及到文件排序或者基于磁盘的临时表时,分配VARCHAR的长度时仍然不能过于慷慨,需要评估实际需要的长度,然后设置一个合适的长度,不能随意设置长度。

四、varchar和nvarchar的使用场景
1. nvarchar适用中文和其他字符,其中N表示Unicode编码,可以解决多语言之间的转换问题

参考:https://www.jb51.net/article/55366.htm

MySQL中char、varchar和nvarchar的区别的更多相关文章

  1. SQL中 char varchar和nvarchar的区别

    转至:http://www.cnblogs.com/carekee/articles/2094676.html char    char是定长的,也就是当你输入的字符小于你指定的数目时,char(8) ...

  2. mysql中char,varchar,text

    1.char char最大长度是255字符,注意是字符数和字符集没关系. 1)可以有默认值, 2)尾部有空格会被截断 3)不管汉字.英文,还是其他编码,都可以存255字符 2.varchar 1)va ...

  3. mysql中char,varchar,text区别总结

    具体对这三种类型的说明不做阐述可以查看mysql帮助文档. char的总结:      char最大长度是255字符,注意是字符数和字符集没关系.可以有默认值,尾部有空格会被截断.varchar的总结 ...

  4. 浅谈SQL Server、MySQL中char,varchar,nchar,nvarchar区别

    最近一次的面试中,被面试官问到varchar和nvarchar的区别,脑海里记得是定长和可变长度的区别,但却没能说出来.后来,在网上找了下网友总结的区别.在这里做个备忘录: 一,SQL Server中 ...

  5. MySQL中char、varchar和text的区别

    三者空间占用方面: char:存储定长数据很方便,CHAR字段上的索引效率极高,可以有默认值,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间(自动用空格填 ...

  6. MySQL中char与varchar区别,varchar最大长度是多少?

    一.首先来说下字符与字节的区别: 字符与字节它们完全不是一个位面的概念,所以两者之间没有"区别"这一说法.在不同编码里,字符和字节的对应关系是不同的.一般来说,半角英文状态下一个字 ...

  7. 万答#11,MySQL中char与varchar有什么区别

    万答#11,MySQL中char与varchar有什么区别 1.实验场景 GreatSQL 8.0.25 InnoDB 2.实验测试 2.1 区别 参数 char varchar 长度是否可变 定长 ...

  8. SQL Server char,varchar,nchar,nvarchar区别

    SQL Server char,varchar,nchar,nvarchar区别 (1)       定义: char:    固定长度,存储ANSI字符,不足的补英文半角空格. nchar:   固 ...

  9. Mysql学习总结(29)——MySQL中CHAR和VARCHAR

    MySQL数据库的字符(串)类不要以为字符类型就是CHAR,CHAR和VARCHAR的区别在于CHAR是固定长度,只要你定义一个字段是CHAR(10),那么不论你存储的数据是否达到了10个字节,它都要 ...

随机推荐

  1. ASP.NET 文件操作类

    1.读取文件 2.写入文件 using System; using System.Collections.Generic; using System.IO; using System.Linq; us ...

  2. Apache IOUtils的使用

    IOUtils 与 FileUtilsCommons IO 是 apache 的一个开源的工具包,封装了 IO操作的相关类,使用 Commons IO 可以很方便的读写文件 commons.jar 包 ...

  3. JDBC使用MYSQL的LOAD DATA LOACAL INFILE和LOAD DATA INFILE

    MYSQL的LOAD方法都必须建立在mysql服务允许使用该命令的情况下: 开启该命令的方法: 1.在实例对应的my.cnf(windows为my.ini)中添加一行local-infile=1(默认 ...

  4. Luogu3514 POI2011 Lollipop 递推、构造

    题目传送门:https://www.luogu.org/problemnew/show/P3514 题意:给出一个只有$1$和$2$的长度为$N$的数列,$M$次询问是否存在一段连续子区间和为$K$. ...

  5. 这里已不再更新,访问新博客请移步 http://www.douruixin.com

    这里已不再更新,访问新博客请移步 http://www.douruixin.com

  6. Ubuntu16.04下使用rdesktop命令远程连接windows机器

    前段时间在本机安装了ubuntu16.04桌面版,后来需要远程连接一台win10系统的跳转机,下面介绍使用rdesktop命令远程连接windows机器的操作记录:1)首先安装rdesktop工具 k ...

  7. MFS+Keepalived双机高可用热备方案操作记录

    基于MFS的单点及手动备份的缺陷,考虑将其与Keepalived相结合以提高可用性.在Centos下MooseFS(MFS)分布式存储共享环境部署记录这篇文档部署环境的基础上,只需要做如下改动: 1) ...

  8. PHP输入流 php://input 相关【转】

    为什么xml_rpc服务端读取数据都是通过file_get_contents(‘php://input', ‘r').而不是从$_POST中读取,正是因为xml_rpc数据规格是xml,它的Conte ...

  9. M2项目测试

    更为详细的测试报告,我们会在后续整理出来. 在M1的基础上,我们新增加了两个个数据表来存放问答对以及标签信息的表:C705question表 与 tag表 第二次迭代中,我们积极地同第三组沟通,了解到 ...

  10. 个人博客week7

    IBM大型机之父佛瑞德·布鲁克斯(Frederick P. Brooks, Jr.)在1986年发表的一篇关于软件工程的经典论文,便以<没有银弹:软件工程的本质性与附属性工作>(No Si ...