char、varchar、nchar、nvarchar这四个家伙不光长得很像,它们所具有的属性也十分的相似,以至于让人感觉有种"剪不断理还乱"的感觉。其实如果了解了它们各自的特点之后,想区分它们是一件很简单的事。世界上没有完全相同的两片叶子对吧,连大自然都没办法造出完全相同的两个事物,更何况人呢对吧。好了不说废话了,言归正传,人类在发明这四个东西的时候分别赋予了它们不同的职责,下面让我们慢慢分析

这四个家伙大致可以按如下两种方式分类

1.按编码机制可以分为Unicode编码标准和非Unicode编码标准

char和varchar属于非Unicode编码标准,通常写成char(n)和varchar(n),其中0B<n<8KB,如果在声明时没有指明那么n默认为1,;

nchar和nvarchar则是Unicode编码标准,同样写成nchar(n)和nvarchar(n),0B<n<4KB,同样n的默认值也是1。

Unicode和非Unicode又有什么区别呢?

Unicode(万国码、统一码),顾名思义它是一种囊括世界上所有语言、所有符号的一种编码,Unicode编码给世界上每一个字符都分配了一个唯一的编码,用来区分彼此,因此它可以自由的跨越不同的语言不同的平台,而不需要进行编码的转换,这就很好的避免了因编码转换产生的错误。但是非Unicode也不是没有优点的,它不像Unicode那样"胸怀宽广",所以它体积就比较小,节省空间,适合那种不需要或者需要少量转换的情况,至于具体选择哪种编码,那你就得根据你的需要来定夺了。

2.按存储数据的特点可以分为定长存储和不定长存储

char和nchar属于定长存储类型,也就是说如果变量的值没有达到定义的大小那么就自动用空格不全(如果超过定义时的长度,多出来的会被截掉)。什么意思呢,举个例子吧,假如将A定义为char(10)或nchar(10),A="hello",那么A放到数据库里实际上是"hello ",空白为五个空格,看完这个小例子char和nchar的特点就了解了吧,下面我们再看另外两个;

varchar和nvarchar不定长存储类型,也就是说它们具体的大小与实际变量的大小有关,如果实际变量小于开始定义的大小那么varchar和nvarchar就会自动"缩小"(不过当实际变量大于定义的大小时,它们同样会自动将多出来的部分截掉)。

同样,定长与不定长也各有各的优缺点。定长因为其长度是固定的,所以在运行效率上比较有优势,执行速度快,但是由于它大小固定的这个原因也注定了它会造成资源浪费,而且它存储的数据一般后面都会有空格所以在读取数据的时候通常要用Trim函数处理一下,这样也给程序带来了一定的麻烦;

不定长的因为其长度可变,不会有多余的空格,所以对数据操作的代码也不用特别的处理,而且不会造成浪费,节省空间,但是由于其长度不定,就制约了它的运行速度,使得其在速率上不如定长类型。

每种类型都有自己的优点和短处,至于到底用谁,那就得根据具体的要求、具体的环境、和你所要达到的效果而定了,不是选择某一个就一定好,而选择另一个就一定差,不同的类型适合不同的情况与要求,不同的情况和要求选择不同的类型。哎!怎么说了半天跟没说一样呢,感觉都是废话啊,哈哈,其实好多事就是这样,没有对与错,只有适合不适合。总之一句话——自己看着办!

菜鸟学数据库——大话 char、varchar、 nchar、nvarchar之间剪不断理还乱的关系相关推荐

  1. 数据库中char varchar nchar nvarchar的区别

    数据库中char varchar nchar nvarchar的区别 我们在进行数据库的设计的时候,很多情况下表中的字段都是用的是字符串类型的数据,其中就有四种选择char varchar nchar ...

  2. SQL中char varchar nchar nvarchar ntext区别和使用(资料汇总)

    SQL中char varchar nchar nvarchar ntext区别和使用(资料汇总) 2008年10月14日 星期二 23:57 一.SQL中char varchar nchar nvar ...

  3. char varchar nchar nvarchar区别

    char varchar nchar nvarchar区别 char与varchar的区别 (1) char的长度是不可变的,而varchar的长度是可变的.(也就是说,定义一个char[4]和var ...

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

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

  5. SqlServer中char,varchar,nchar,nvarchar的区别

    在数据库中建表时,总是习惯的将一些字段定义为nvarchar,但关于它和nchar的区别,却没有细究过,今天上网仔细了解一下做个总结: 1.n代表的是Unicode字符,可以解决多语言字符集之间的转换 ...

  6. sqlite数据库的char,varchar,text,nchar,nvarchar,ntext的区别

    1.CHAR.CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间,不足的自动用空格填充. 2.VAR ...

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

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

  8. char和nchar,varchar和nvarchar 之间的区别

    char和nchar,varchar和nvarchar的区别 一.定义: char:固定长度,存储ANSI字符,不足的补英文半角空格.//长度固定的英文 nchar:固定长度,存储Unicode字符, ...

  9. 数据库之char vchar nchar nvchar的区别

    首先介绍一下定长或变长 所谓定长就是长度固定的,当输入的数据长度没有达到指定的长度时将自动以英文空格在其后面填充,使长度达到相应的长度:有var前缀的,表示是实际存储空间是变长的,比如varchar, ...

最新文章

  1. 腐蚀rust高速箭怎么做不了_皮带轮动平衡怎么做
  2. 阿里三面被挂,幸获内推,历经5轮终于拿到口碑offer
  3. Ctrl+C提示是否终止shell脚本
  4. AngularJS组件 - ngTags
  5. the virtual machine is configured for 64-bit guest operating systems
  6. YBTOJ:彩球抽取(期望)
  7. JAVA面试常考系列五
  8. python的字符串内建函数
  9. Java中implies_boolean implies(Permission p)
  10. 专科学python真的不好_专科生转行做python运维靠谱吗?
  11. QML笔记-Particle的基本使用(粒子系统的基本使用)
  12. thymeleaf 中select下拉回显
  13. 【汇编优化】ARM Intrinsic优化
  14. VS2008内嵌水晶报表翻页BUG修正方法
  15. 第四章 政策过程及其理论模型
  16. `Shell`高级编程 Day02 —— Shell脚本初步入门
  17. 离散作业--求左陪集
  18. opencv实现眼动检测【胡子哥哥】
  19. java版我的世界怎么疾跑,我的世界怎么疾跑?疾跑快捷键介绍
  20. tp框架该网页无法正常运作的一个坑

热门文章

  1. 信息隐藏——第四章 图像信息隐藏数
  2. 在Linux上测试网络的命令之3----基础网络命令(netstat\ss)
  3. 【数据库基础知识六】内连接、外连接、自连接
  4. python解常微分方程龙格库_excel实现四阶龙格库塔法runge-kutta解二阶常微分方程范例.xls...
  5. iOS常用功能 - 根据链接生成二维码图片
  6. javaSE探赜索隐之一<小生的第一篇CSDN博客,欢迎大家指正>
  7. 优秀logo设计解析_优秀logo设计作品及寓意解析,国外精品logo设计图片分享
  8. 如何修炼成某一领域的高手?
  9. 解决vue google无状态播放音频文件
  10. gRPC-proto文件写法