char、varchar、nvarchar 的区别

引言

我们在做机房收费系统的时候大都遇到过明明数据库里有数据,但总是出现调出来却显示不到窗体表格上的问题。那么,我们遇到这样的问题通常用的方法就是利用代码去空格,其实这并没有在根上真正的解决问题,了解数据库中的数据类型,我们才会灵活的实现我们需要的功能,也能够帮助自己去在建立一个数据库表结构。

下面,我就介绍一下我们在机房收费系统中经常使用的 char、varchar、nvarchar 的区别,希望对大家有所帮助。

比较

这里写图片描述
这里写图片描述

【1】定义一个char[10]和一个varchar[10],存进去的是‘csdn’

  1. char 的长度是不可变的,那么 char 所占的长度依然为10,除了字符 ‘csdn’ 外,后面跟六个空格,去空格用Trim 。
    varchar 的长度是可变的,那么 varchar 所占的长度为4,就是 ‘csdn’,后面无空格。

  2. .因为长度固定, char的存取数度还是要比varchar要快得多,方便程序的存储与查找;但是char 多余的空格占位符付出的是空间的代价,可谓是以空间换取时间效率,而varchar是以空间效率为首位的。

  3. char 的长度是不可变的,那么 char 所占的长度依然为10,除了字符 ‘csdn’ 外,后面跟六个空格,去空格用Trim 。
    varchar 的长度是可变的,那么 varchar 所占的长度为4,就是 ‘csdn’,后面无空格。

【2】有 var 前缀的,表示是实际存储空间是变长的,varchar,nvarchar

所谓定长就是长度固定的,当输入的数据长度没有达到指定的长度时将自动以英文空格在其后面填充,使长度达到相应的长度;而变长字符数据则不会以空格填充,比较例外的是,text存储的也是可变长。

【3】n 表示 Unicode 字符,即所有字符都占两个字节,nchar,nvarchar

实例理解

【1】char(n) 和 varchar(n),n 为字节数

char(n)

char(4):4 是代表字节数,一个汉字代表一个字符,2个字节;一个英文代表一个字符,一个字节。现在我们假如存储‘abcd’(4个字节,所以可以存储),再假如存储‘中国你好’(8个字节,所以不能存储),再假如存储‘ab’(由于是有四个字节,而现在ab只占两个字节,所以用两个空格补上后面的两个字节,所以数据库的数据为‘ab ’)

varchar(n)

varchar(4):假如存储‘abcd’(4个字节,所以可以存储),再假如存储‘中国你好’(8个字节,所以不能存储),再假如存储‘ab’(由于是有四个字节,而现在ab只占两个字节,然而varchar(n)是由var开头的,数据是可变的,所以不用像char(4),用空格补字节的方法,而是可以直接省略空格,所以数据库的数据还是‘ab’)

【2】nchar(n)和nvarchar(n)

我们先弄清楚以n开头的数据类型是什么意思,已n开头表示此字符是unicode编码的格式,不是以n开头的自然不是unicode编码格式。我们在前面说过,括号里面的n是代表字节数,而在这里,由于是unicode编码格式,所以n代表2n个字节数,同样以上面的例子举例

nchar(n)
nchar(4),既然是unicode编码格式并且不是可变的,所以总共可以存储2*4=8个字节,我们现在假如存储‘abcd’(由于是只占四个字节,所以在数据库中的数据为‘abcd ’),假如存储‘中国你好’(则完全可以存放)

nvarchar(n)
既然是unicode编码且为可变的,所以存储‘abcd’(在数据库中的数据为‘abcd’,不会再补空格)

后记

1.知识总在那里等你,早晚是要学习的,现在学比以后学更好。(之前数据库视频没有好好看) 2.有些知识我们上网一查便能查到,但只有自己总结一遍的时候才会发现,我们之前认识的并不全面深刻。