SQLSERVER中char nchar varchar nvarchar的区别
1.Unicode给每个字符提供了一个唯一的数字,不论是什么平台不论是什么程序不论是什么语言
2.Unicode都是双字节的
3.非Unicode中English是单字节,中文双字节
A.存储Unicode
nvarchar(可变长度) n 值必须在 1 到 4,000 之间(含),n指的是字符的长度。存储大小为两倍 n 字节,由于存储的是Unicode数据,
所以字符数不等于字节数可能多个字节只能存储一个字符
举例说明:
DECLARE @VAR1 NVARCHAR(4),
@VAR2 NVARCHAR(4),
@VAR3 NVARCHAR(4)
SET @VAR1='1234'
SET @VAR2='ABCD'
SET @VAR3='我爱中国'
PRINT @VAR1
PRINT @VAR2
PRINT @VAR3
/*
1234
ABCD
我爱中国
*/
nchar (固定的)
DECLARE
@VAR1 NCHAR (4),
@VAR2 NCHAR (4),
@VAR3 NCHAR (8)
SET @VAR1='1234'
SET @VAR2='ABCD'
SET @VAR3='我爱中国'
PRINT @VAR1
PRINT @VAR2
PRINT @VAR3
/*
1234
ABCD
我爱中国
*/
B.可变长度和固定长度的解释
DECLARE @VAR1 NVARCHAR(6),
@VAR2 NCHAR(6)
SET @VAR1='123'
SET @VAR2='123'
PRINT @VAR1
PRINT @VAR2 --固定的长度,没有达到固定的长度,剩余部分用空格补充
--注意看光标
C.存储非Unicode
varchar 可变长度,非 Unicode 字符数据。n 的取值范围为 1 至 8,000
DECLARE @VAR1 VARCHAR(4),
@VAR2 VARCHAR(4),
@VAR3 VARCHAR(4)
SET @VAR1='1234'
SET @VAR2='ABCD'
SET @VAR3='我爱中国'
PRINT @VAR1
PRINT @VAR2
PRINT @VAR3
/*
1234
ABCD
我爱
*/
char 固定长度,非 Unicode 字符数据,n 的取值范围为 1 至 8,000,存储大小是 n 个字节 ,由于只能存储ASCII数据,所以字符数等于字节数
DECLARE @VAR1 CHAR(4),
@VAR2 CHAR(4),
@VAR3 CHAR(4)
SET @VAR1='1234'
SET @VAR2='ABCD'
SET @VAR3='我爱中国'
PRINT @VAR1
PRINT @VAR2
PRINT @VAR3
/*
1234
ABCD
我爱
*/
总结:
1.如果站点支持多语言,请考虑使用 Unicode nchar 或 nvarchar 数据类型,以最大限度地消除字符转换问题。
2.如果列字段的变化很大建议还是用可变长度的,如果变化不大,可以使用固定长度的。
3.NCHAR NVARCHAR都要在字符前面加N,避免出现乱码。
4.char性能好;varchar节省空间;选择方法:10个字节以上的用varchar。
5.n类型的占用空间大,性能低,如果不准备存中文或中亚文字则尽量避免使用。
6.尤其向类似工号的字段更不要使用n类型,首先它不会存入中文,其次它可能作为索引,此时对性能的影响就更大。