SQL Server中char,varchar,nchar, nvarchar的区别

这是一个比较基础的问题,但是如果长时间没有去复习,很容易忘记.

今天重新温习一遍,记录如下:

在讲他们的区别之前,先值得一个基本的事情:=> 英文字符和中文字符的区别

 英文字符 =》 1个英文字符只需要1个字节存储

中文字符 => 1个英文字符需要2个字节存储

这样,导致中文字符的存储和英文字符的存储不兼容,会有冲突。 为了解决这个问题,产生了一种Unicode字符集. 在Unicode字符集中,所有的字符(无论是英文字符,还是中文字符), 都统一使用2个字节存储.

这就是这里nchar,nvarchar, ntext的由来,这里的第一个字母n,就是代表unicode字符集

 

好了,我们一步一步来看看

char 和 varchar的区别

char => 存储的是定长数据, 比如char(8),

当你存入的字符长度小于8时,它会在后面补空值,使长度达到8

当你存入的字符长度大于8时,它会截取超出的字符,使长度只有8

用char来存储数据,存储效率,索引效率很高,但是它占用固定空间,容易造成空间浪费

varchar => 顾名思义,存储的是变长数据,  它存储的是字符的实际长度(但其实 varchar类型的实际长度是它的值的实际长度+1 => 这+1的这个字节用来保存实际占用了多少长度,也即存储字符的实际的长度值)

varchar(n) => n的范围是1-8000, 也就是说可以存储最多8000个非unicode字符(比如: 8000个英文字符), 占用8000个字节.  也可以存储4000个中文字符,占用8000个字节

显然,用varchar来存储数据,不会造成空间浪费,但是它的存储效率,索引效率都没有char高

 

nchar, nvarchar

就是我们上面说的,存储的是unicode字符, 也就是说如果用nchar, nvarchar类型,不管你存储的是英文还是汉字,都是1个字符(1个英文字符或者1个汉字字符)占用2个字节

所以,nvarchar(n) => n的范围是1-4000,也就是说最多存储4000个unicode字符(4000个中文字符或者4000个英文字符),占用8000个字节

 

 

posted on 2020-10-19 14:31  新西兰程序员  阅读(42)  评论(0编辑  收藏