nvarchar,nchar,vchar,nvchar,char,ntext,text区别详解

联机帮助上的:

char(n) 定长 索引效率高 程序里面使用trim去除多余的空白 n 必须是一个介于 1 和 8,000 之间的数值,存储大小为 n 个字节
varchar(n) 变长 效率没char高 灵活 n 必须是一个介于 1 和 8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节
text(n) 变长 非Unicode数据     
nchar(n) 定长 处理unicode数据类型(所有的字符使用两个字节表示) n 的值必须介于 1 与 4,000 之间。存储大小为 n 字节的两倍
nvarchar(n) 变长 处理unicode数据类型(所有的字符使用两个字节表示) n 的值必须介于 1 与 4,000 之间。字节的存储大小是所输入字符个数的两倍。所输入的数据字符长度可以为零
ntext(n) 变长 处理unicode数据类型(所有的字符使用两个字节表示)     

Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示

很多开发者进行数据库设计的时候往往并没有太多的考虑char, varchar类型,有的是根本就没注意,因为存储价格变得越来越便宜了,忘记了最开始的一些基本设计理论和原则,这点让我想到了现在的年轻人,大手一挥一把人民币就从他手里溜走了,其实我想不管是做人也好,做开发也好,细节的把握直接决定很多东西。当然还有一部分人是根本就没弄清楚他们的区别,也就随便选一个。在这里我想对他们做个简单的分析,当然如果有不对的地方希望大家指教。

1、CHAR。CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间,不足的自动用空格填充,所以在读取的时候可能要多次用到trim()。

2、VARCHAR。存储变长数据,但存储效率没有CHAR高。如果一个字段可能的值是不固定长度的,我们只知道它不可能超过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码

varchar在SQL Server中是采用单字节来存储数据的,nvarchar是使用Unicode来存储数据的.中文字符存储到SQL Server中会保存为两个字节(一般采用Unicode编码),英文字符保存到数据库中,如果字段的类型为varchar,则只会占用一个字节,而如果字段的类型为nvarchar,则会占用两个字节.

正常情况下,我们使用varchar也可以存储中文字符,但是如果遇到操作系统是英文操作系统并且对中文字体的支持不全面时, 在SQL Server存储中文字符为varchar就会出现乱码(显示为??).而且正常情况下,主机都会支持中文的环境,所以如果使用varchar来存储数据,在开发阶段是发现不了的.多数情况下,在布署的时候也不会有问题.

但是!如果布署的主机是英文操作系统,并且不支持中文环境,那问题就出来了.所有的varchar字段在存储中文的时候都会变成乱码(显示为??).而且一般情况下你不会知道这是因为你采用了错误的数据类型来存储所造成的,你会试着去装中文字体,试着去设置操作系统的语言环境...这些都不能解决问题,唯一能解决问题的是把数据库字段的类型个性为nvarchar(或者nchar).对项目管理比较熟悉的朋友应该都知道,到布署阶段再来修改数据库是一个很恐怖的事情.

使用nvarchar的另一个非常好处就是在判断字符串的时候可以不需要考虑中英文两种字符的差别.

当然,使用nvarchar存储英文字符会增大一倍的存储空间.但是在存储代价已经很低廉的情况下,优先考虑兼容性会给你带来更多好处的.

所以在Design的时候应该尽量使用nvarchar来存储数据.只有在你确保该字段不会保存中文的时候,才采用varchar来存储

nvarchar,nchar,vchar,nvchar,char…相关推荐

  1. XX公司数据库迁移项目可行性研究与风险评估

    XX公司数据库迁移项目可行性研究与风险评估 请尊重知识,请尊重原创 更多资料参考请见  http://www.cezuwang.com/listFilm?page=1&areaId=906&a ...

  2. char* 大小_SQL Server中char, nchar, varchar和nvarchar数据类型有何区别

    当问及CHAR,VARCHAR,NCHAR和NVARCHAR这些数据类型之间的差异时,这个看似很简单,但有时您也会感到困惑. 要在数据库存储字符.数值和特殊字符可以使用这4种数据类型,那么这4种数据类 ...

  3. mysql中nchar_浅谈SQL Server、MySQL中char,varchar,nchar,nvarchar区别

    1,定义: char:    固定长度,存储ANSI字符,不足的补英文半角空格. nchar:   固定长度,存储Unicode字符,不足的补英文半角空格 varchar:  可变长度,存储ANSI字 ...

  4. char varchar nchar nvarchar 四者的区别是什么(为何SQL Server自动给字符串末尾加空格)...

    本着低碳的原则将几个变量声明为nchar,结果发现尾巴上每次都多一大串空格,C#中不得不多次Trim劳心费神易出错.上网一查原来四种字符串看似相近其实讲究很多,其中以本帖最为全面,特此转发. 原帖:h ...

  5. 区分数据库中的 char、varchar、nchar、nvarchar

    -在写数据库的时候字符串类型的数据该怎么定义? -了解了他们的区别就好办了! char.varchar.nchar.nvarchar的说明: char ( n ) :固定长度,非Unicode字符数据 ...

  6. char/nchar、varchar/nvarchar、char/character区别

    一直对这几个数据类型很迷惑,其实以前看明白过,但是时间长了又忘了,今天再次查了查资料,仔细研究了一下char.varchar.nchar和nvarchar,然后写下来以备以后查阅. 如果你想简单的了解 ...

  7. 数据库有char和nchar varchar 和nvarchar区别是啥?

    "sqlserver里面有char和nchar,那个n据说是指unicode的数据,这个是什么意思."        并不是所有简单的问题都很容易回答,就像这个问题一样.于是我答应 ...

  8. nchar 和 nvarchar

    nchar   和   nvarchar     nchar   是固定长度   Unicode   数据的数据类型,nvarchar   是可变长度   Unicode   数据的数据类型,二者均使 ...

  9. char,varchar,nvarchar有什么区别

    一 . nchar     和     nvarchar       nchar     是固定长度     Unicode     数据的数据类型,nvarchar     是可变长度     Un ...

最新文章

  1. 字节跳动李航:自学机器学习,研究AI三十载,他说AI发展或进入平缓期
  2. Java软件架构师所要需的东西
  3. Oracle connet by prior 关键字的简单介绍和用法
  4. 《可爱的Python》读书笔记(五)
  5. linux切换root密码错,(转)Linux下root密码丢失和运行级别错误的解决办法
  6. SAP BOPF和Spring框架里加了注解的控制器是如何被调用的
  7. Java内存模型深度解析:重排序
  8. 清北第一套题(zhx)
  9. 车载摄像头技术、市场、发展前景
  10. 牛客刷题记录之语法入门选择结构篇
  11. scrapy爬取动态网页
  12. 解决Hadoop Browse Directory Couldn‘t upload the file 错误.无法上传文件
  13. oracle 11g 安装 先决性检查 环境变量,Window XP安装oracle11gR2数据库先决条件检查的问题解决(实测有效)...
  14. 关于backgroundColor=red写法是否正确的解答
  15. pc客户端软件自动化测试工具,自动化测试工具(QuickTester)
  16. 为什么Java大数据是最火爆的编程语言?
  17. 用户输入查询与拼音首字母的结合,提高用户的操作体验
  18. 学编程需要具备什么?
  19. 明光市机器人_明光市情侣酒店客房语音智能控制系统厂家
  20. 导出excel时,数字过长怎么解决

热门文章

  1. Skill Level 4 D23
  2. App Store最新审核指南(2015年3月更新版)
  3. PHP—使用MYSQL来登陆用户
  4. Linux查看和剔除当前登录用户-转
  5. java servlet 学习_java学习之web基础(1):Servlet
  6. 蓝桥杯 ADV-84 算法提高 图形输出
  7. PAT 1068. 万绿丛中一点红(20)-乙级
  8. 1090. Highest Price in Supply Chain (25)-PAT甲级真题
  9. 如何将Sublime Text中的代码以彩色高亮形式复制到博客或word文档里
  10. 锁定Mac的键盘:连击5次option键