SQLSERVER中char nchar varchar nvarchar的区别

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类型,首先它不会存入中文,其次它可能作为索引,此时对性能的影响就更大。







原文地址:https://www.cnblogs.com/mc67/p/4848649.html