最近发现自己经常会把这几个字义不时模糊起来,所以自己整理了一下这方面文章。先从MSDN拿出定义出来,理论知识先要看懂
char [ ( n ) ]

固定长度,非 Unicode 字符数据,长度为 n 个字节。n 的取值范围为 1 至 8,000,存储大小是 n 个字节。char 的 SQL 2003 同义词为 character。

varchar [ ( n | max ) ]

可变长度,非 Unicode 字符数据。n 的取值范围为 1 至 8,000。max 指示最大存储大小是 2^31-1 个字节。存储大小是输入数据的实际长度加 2 个字节。所输入数据的长度可以为 0 个字符。SQL-2003 中的 varchar 就是 char varying 或 character varying。

nchar [ ( n ) ]

n 个字符的固定长度的 Unicode 字符数据。n 值必须在 1 到 4,000 之间(含)。存储大小为两倍 n 字节。nchar 的 SQL-2003 同义词为 national char 和 national character。

nvarchar [ ( n | max ) ]

可变长度 Unicode 字符数据。n 值在 1 到 4,000 之间(含)。max 指示最大存储大小为 2^31-1 字节。存储大小是所输入字符个数的两倍 + 2 个字节。所输入数据的长度可以为 0 个字符。nvarchar 的 SQL-2003 同义词为 national char varying 和 national character varying。

        大家从以上定义可以看到,char,varchar与nchar,nvarchar只是多了一个N而已,再细看,原来一个是非Unicode流,一个Unicode流。由此我们可以看出,Unicode字符流,无论我们输入字符,数字还是汉字,都是以两个字节存储。而非Unicode字符流却相反,每个英文字符和数字都占一个字节,而一个中文的字符会占两个字节。

以上理解清楚后,我们再来看看char与varchar的区别

        CHAR的长度是固 定的,而VARCHAR的长度是可以变化的, 比如,存储字符串“aaa",对于CHAR (20),表示你存储的字符将占20个字节(包括17个空字符),而同样的VARCHAR2 (20)则只占用3个字节的长度,20只是最大值,当你存储的字符小于20时,按实际长度存储。由于char是以固定长度的,所以它的速度会比 varchar快得多!但程序处理起来要麻烦一点,要用Trim之类的函数把两边的空格去掉!           

        如果列数据项的大小可能相同,请使用 char。如果列数据项的大小可能差异很大,请使用 varchar。同理,nchar与nvarchar的区别也是一样。这里我就不多说了。

Posted on 2008-08-22 13:51  Yongming Ye  阅读(163)  评论(0编辑  收藏  举报