MySQL中数据类型(char(n)、varchar(n)、nchar(n)、nvarchar(n)的区别)(转)
一、第一种
char(n)和varchar(n)的区别:
在这里我们可以清楚的看到他们表面的区别就是前面是否有var,在这里解释一下var是什么意思,var代表“可变的”的意思
下面看个例子:
char(4)//char代表的是字符的意思,这在Java中学过,一个汉字代表一个字符,2个字节;一个英文代表一个字符,一个字节。而这里char(n),(除了它,其余三个都是如此)n是代表字节数,现在我们假如存储‘abcd’(4个字节,所以可以存储),再假如存储‘中国你好’(8个字节,所以不能存储),再假如存储‘ab’(由于是有四个字节,而现在ab只占两个字节,所以用两个空格补上后面的两个字节,所以数据库的数据为‘ab ’)
varchar(4)//同样我们以上面的例子举例,假如存储‘abcd’(4个字节,所以可以存储),再假如存储‘中国你好’(8个字节,所以不能存储),再假如存储‘ab’(由于是有四个字节,而现在ab只占两个字节,然而varchar(n)是由var开头的,数据是可变的,所以不用像char(4),用空格补字节的方法,而是可以直接省略空格,所以数据库的数据还是‘ab’)
nchar(n)和nvarchar(n)
同样我们先弄清楚以n开头的数据类型是什么意思,已n开头表示此字符是unicode编码的格式,不是以n开头的自然不是unicode编码格式。我们在前面说过,括号里面的n是代表字节数,而在这里,由于是unicode编码格式,所以n代表2n个字节数,同样以上面的例子举例:
nchar(4)//既然是unicode编码格式并且不是可变的,所以总共可以存储2*4=8个字节,我们现在假如存储‘abcd’(由于是只占四个字节,所以在数据库中的数据为‘abcd ’),假如存储‘中国你好’(则完全可以存放)
nvarchar(4)//既然是unicode编码且为可变的,所以存储‘abcd’(在数据库中的数据为‘abcd’,不会再补空格)
最后,总结一下,var代表可变的,n开头代表是unicode编码。
二、第二种
1、char:
固定长度的非Unicode字符数据,最大长度为8000个字符。
2、varchar:
可变长度的非Unicode数据,最长为8000个字符。
3、nvarchar:
可变长度Unicode数据,其最大长度为4000字符。
4、nchar:
固定长度的Unicode数据,最大长度为4000个字符。
5、char和varchar都是字符串类型的:
用Unicode编码的字符串,结果是字符的整数值
用法区别:
文字字段若长度固定,如:身分证号码,就不要用varchar或nvarchar,应该用char或nchar。
支持多语言的站点应考虑使用Unicode nchar或nvarchar数据类型以尽量减少字符转换问题
文字字段若长度不固定,如:地址,则该用varchar或nvarchar。除了可节省存储空间外,存取硬盘时也会较有效率。
第三种:
1、char。char存储定长数据很方便,char字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间,不足的自动用空格填充,所以在读取的时候可能要多次用到trim()。
2、varchar。存储变长数据,但存储效率没有cahr高。如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义varchar(10)是最合算的。varchar类型的实际长度是它的值的实际长度+1。为什么“+1”呢?这一个字节用于保存实际使用了多大的长度。从空间上考虑,用varchar合适;从效率上考虑,用char合适,关键是根据实际情况找到权衡点。
3、text。text存储可变长度的非Unicode数据,最大长度为2^31-1(2,147,483,647)个字符。
4、nchar、nvarchar、ntext。这三种从名字上看比前面三种多了个“n”。它表示存储的是Unicode数据类型的字符。我们知道字符中,英文字符只需要一个字节存储就足够了,但汉字众多,需要两个字节存储,英文与汉字同时存在时容易造成混乱,Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。nchar、nvarchar的长度是在1到4000之间。和char、varchar比较起来,nchar、nvarchar则最多存储4000个字符,不论是英文还是汉字;而char、varchar最多能存储8000个英文,4000个汉字。可以看出使用nchar、nvarchar数据类型时不用担心输入的字符是英文还是汉字,较为方便,但在存储英文时数量上有些损失。
所以一般来说,如果含有中文字符,用nchar/nvarchar,如果纯英文和数字,用char/varchar
我把他们的区别概括成:
char,nchar定长,速度快,占空间大,需处理
varchar,nvarchar,text不定长,空间小,速度慢,无需处理
nchar、nvarchar、ntext处理Unicode码
参考:
http://blog.csdn.net/IUNIQUE/article/details/52902033(以上内容部分转自此篇文章)
http://blog.csdn.net/ivanluc/article/details/5174536(以上内容部分转自此篇文章)
http://www.jb51.net/article/37995.htm(以上内容部分转自此篇文章)
MySQL中数据类型(char(n)、varchar(n)、nchar(n)、nvarchar(n)的区别)(转)的更多相关文章
- 浅谈SQL Server、MySQL中char,varchar,nchar,nvarchar区别
最近一次的面试中,被面试官问到varchar和nvarchar的区别,脑海里记得是定长和可变长度的区别,但却没能说出来.后来,在网上找了下网友总结的区别.在这里做个备忘录: 一,SQL Server中 ...
- SQLServer中char、varchar、nchar、nvarchar比较
转自:http://www.cnblogs.com/bluesky_blog/archive/2009/07/31/1535722.html 对于程序中的string型字段,SQLServer中有ch ...
- SQLServer中char、varchar、nchar、nvarchar的区别
http://www.cnblogs.com/14lcj/archive/2012/07/08/2581234.html SQLServer中char.varchar.nchar.nvarchar的区 ...
- char、varchar、nchar、nvarchar的区别(转)
转自:http://tech.diannaodian.com/dw/data/sql/2011/1005/135556.html 对于程序中的string型字段,SQLServer中有char.var ...
- char、varchar、nchar、nvarchar特点比较
于程序中的string型字段,SQLServer中有char.varchar.nchar.nvarchar四种类型来对应(暂时不考虑text和ntext),开建立数据库中,对这四种类型往往比较模糊,这 ...
- char、varchar、nchar、nvarchar、text的区别
char.varchar.nchar.nvarchar.text的区别 1.有var前缀的,表示是实际存储空间是变长的,varchar,nvarchar 所谓定长就是长度固定的,当输入的数据长度没有达 ...
- Sql Server char、varchar、nchar、nvarchar的区别
(1) 定义: char: 固定长度,存储ANSI字符,不足的补英文半角空格. nchar: 固定长度,存储Unicode字符,不足的补英文半角空格 varchar: 可变长度,存储ANSI字符,根据 ...
- Mysql中的char与varchar length()与char_length()
在mysql中,char和varchar都表示字符串类型.但他们存储和检索数据的方式并不相同. 在表结构定义中声明char和varchar类型时,必须指定字符串的长度.也就是该列所能存储多少个字符(不 ...
- 2019-2-20Sqlserver数据库中char、varchar、nchar、nvarchar的区别及查询表结构
varchar 和 nvarchar区别: varchar(n)长度为 n 个字节的可变长度且非 Unicode 的字符数据.n 必须是一个介于 1 和 8,000 之间的数值.存储大小为输入数据的字 ...
- SQL中char、varchar、nchar、nvarchar 详解
char char是定长的,也就是当你输入的字符小于你指定的数目时,char(8),你输入的字符小于8时,它会再后面补空值.当你输入的字符大于指定的数时,它会截取超出的字符. varchar[ ...
随机推荐
- BZOJ 4368: [IOI2015]boxes纪念品盒
三种路径,左边出去左边回来,右边出去右边回来,绕一圈 绕一圈的路径最多出现一次 那么绕一圈的路径覆盖的点一定是左边半圈的右边和右边半圈的左边 枚举绕一圈的路径的起始点(一定要枚举,这一步不能贪心),更 ...
- java处理excel
JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该API非Windows操作系统也可以通过 ...
- Xampp 配置出现403无法访问
找到\xampp\apache\conf\httpd.conf配置文件 Access forbidden! You don’t have permission to access the reques ...
- SVM 与 LR的异同
LR & SVM 的区别 相同点 LR和SVM都是分类算法. 如果不考虑核函数,LR和SVM都是线性分类算法,也就是说他们的分类决策面都是线性的. LR和SVM都是监督学习算法. LR和SVM ...
- python装饰器实现用户密码认证(简单初形)
import timecurrent_user={'user':None}def auth(engine = 'file'): def deco(func): #func=最初始的index和最初始的 ...
- linux下文件显示被加锁如何解决?
1.很多时候从别的机器上拷贝过来的文件,没有权限打开,上面有一个小锁. 2.判断是权限没有,查询ls -al得知文件的的所有者,和所有者在的组都不是本机 3.使用chown改变用户的所有者和所有者所在 ...
- layui.code代码装饰器
<!doctype html><html lang="en"><head> <meta charset="UTF-8" ...
- ACM程序设计选修课——Problem E:(ds:图)公路村村通(Prim)
问题 E: (ds:图)公路村村通 时间限制: 1 Sec 内存限制: 128 MB 提交: 9 解决: 5 题目描述 现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本, ...
- BZOJ4817 [Sdoi2017]树点涂色 【LCT + 线段树】
题目 Bob有一棵n个点的有根树,其中1号点是根节点.Bob在每个点上涂了颜色,并且每个点上的颜色不同.定义一条路 径的权值是:这条路径上的点(包括起点和终点)共有多少种不同的颜色.Bob可能会进行这 ...
- 刷题总结——xor(ssoj)
题目: 题目背景 OURCE:NOIP2015-SHY-7 题目描述 求一棵带边权的树的一条最大 Xor 路径的值.这里的“路径”不一定从根到叶子结点,中间一段路径只要满足条件也可以. 输入格式 第一 ...