- 最近发现自己经常会把这几个字义不时模糊起来,所以自己整理了一下这方面文章。先从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的区别
CHAR的长度是固 定的,而VARCHAR的长度是可以变化的, 比如,存储字符串“aaa",对于CHAR (20),表示你存储的字符将占20个字节(包括17个空字符),而同样的VARCHAR2 (20)则只占用3个字节的长度,20只是最大值,当你存储的字符小于20时,按实际长度存储。由于char是以固定长度的,所以它的速度会比 varchar快得多!但程序处理起来要麻烦一点,要用Trim之类的函数把两边的空格去掉!
如果列数据项的大小可能相同,请使用 char。如果列数据项的大小可能差异很大,请使用 varchar。同理,nchar与nvarchar的区别也是一样。这里我就不多说了。