MySQL中char、varchar和nvarchar的区别
一、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的区别的更多相关文章
- SQL中 char varchar和nvarchar的区别
转至:http://www.cnblogs.com/carekee/articles/2094676.html char char是定长的,也就是当你输入的字符小于你指定的数目时,char(8) ...
- mysql中char,varchar,text
1.char char最大长度是255字符,注意是字符数和字符集没关系. 1)可以有默认值, 2)尾部有空格会被截断 3)不管汉字.英文,还是其他编码,都可以存255字符 2.varchar 1)va ...
- mysql中char,varchar,text区别总结
具体对这三种类型的说明不做阐述可以查看mysql帮助文档. char的总结: char最大长度是255字符,注意是字符数和字符集没关系.可以有默认值,尾部有空格会被截断.varchar的总结 ...
- 浅谈SQL Server、MySQL中char,varchar,nchar,nvarchar区别
最近一次的面试中,被面试官问到varchar和nvarchar的区别,脑海里记得是定长和可变长度的区别,但却没能说出来.后来,在网上找了下网友总结的区别.在这里做个备忘录: 一,SQL Server中 ...
- MySQL中char、varchar和text的区别
三者空间占用方面: char:存储定长数据很方便,CHAR字段上的索引效率极高,可以有默认值,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间(自动用空格填 ...
- MySQL中char与varchar区别,varchar最大长度是多少?
一.首先来说下字符与字节的区别: 字符与字节它们完全不是一个位面的概念,所以两者之间没有"区别"这一说法.在不同编码里,字符和字节的对应关系是不同的.一般来说,半角英文状态下一个字 ...
- 万答#11,MySQL中char与varchar有什么区别
万答#11,MySQL中char与varchar有什么区别 1.实验场景 GreatSQL 8.0.25 InnoDB 2.实验测试 2.1 区别 参数 char varchar 长度是否可变 定长 ...
- SQL Server char,varchar,nchar,nvarchar区别
SQL Server char,varchar,nchar,nvarchar区别 (1) 定义: char: 固定长度,存储ANSI字符,不足的补英文半角空格. nchar: 固 ...
- Mysql学习总结(29)——MySQL中CHAR和VARCHAR
MySQL数据库的字符(串)类不要以为字符类型就是CHAR,CHAR和VARCHAR的区别在于CHAR是固定长度,只要你定义一个字段是CHAR(10),那么不论你存储的数据是否达到了10个字节,它都要 ...
随机推荐
- DRF跨域,简单请求和复杂请求
跨域就是跨域名,跨端口 - 为什么会有跨域? 浏览器有同源限制策略 - 绕过浏览器同源策略就可以跨域 - 方式一: jsonp(利用浏览器特性) 在html动态创建script标签 同源策略会阻止a ...
- Photoshop 基础六 图层
图层就像一张张叠在一起的胶片,最上层的图像挡住下面的图像,使之看不见 上层图像中没有像素的地方为透明区域,通过透明区域可以看到下一层的图像 图层是相对独立的,在一个图层编辑时,不影响其它图层 每次只能 ...
- ubuntu install pip
ubuntu 安装pip sudo apt-get update sudo apt-get upgrade sudo apt-get install python-pip
- ESP8266开发综合篇(LUA开发-视频教程总揽)
为了解决基础教程简单入门但不实用,项目方案非常实用但比较难的问题,开始推出8266开发综合篇 综合篇涉及到AT,LUA,SDK,LUA(sdk)开发,LUA和SDK开发会同步进行,后期再整理AT指令的 ...
- python制作电脑定时关机办公神器,另含其它两种方式,无需编程!
小编本人目前就是在电脑面前工作,常常会工作到凌晨两三点还在为自己的梦想奋斗着.有时在办公椅上就稀里糊涂睡着了,我相信有很多朋友和我一样,这样是很不好的.第一对身体不好,第二对电脑不好. 对身体 ...
- eclipse 报错Version 1.6.0_45 of the JVM is not suitable for this product. Version:1.7 or greater is required
最近离职来了一家新公司,之前的公司的开发IDE用的是IntelliJIDEA和SpringSourceToolSuit,自己在家里用的也是MyEclipse,所以使用eclipse的经验还是不足.结果 ...
- ASP.NET Core中如果Response.HasStarted已经为true,就不能更改Response.Cookies和Response.Headers等属性的值了
最近我在ASP.NET Core中做了一个中间件CustomizedMiddleware,要说该中间件的功能也很简单,其实就是往HttpResponse中添加一个Cookie而已,但是我将添加Cook ...
- .net core 中使用httpclient,HttpClientFactory的问题
Microsoft 在.Net Framework 4.5中引入了HttpClient,并且是在.NET服务器端代码中使用Web API的最常用方法.但它有一些严重的问题,如释放HttpClient对 ...
- MySQL数据库服务器(YUM)安装
1. 概述2. 部署过程2.1 虚拟机console的NFS服务端配置2.2 虚拟机node15的NFS客户端配置2.3 虚拟机安装MySQL环境2.4 配置MySQL3. 错误及解决3.1 启动失败 ...
- 基于HTML5 Canvas WebGL制作分离摩托车
工业方面制作图表,制作模型方面运用到 3d 模型是非常多的,在一个大的环境中,构建无数个相同的或者不同的模型,构建起来对于程序员来说也是一件相当头疼的事情,我们利用 HT 帮大家解决了很大的难题,无数 ...