Sql Server char nchar varchar nvarchar 区别

一、 用快捷键Alt+F1 打开的表结构, 我们看到的length, nchar和nvarchar 需要除以2才是储存的真正长度

 

 

二 、 类型前缀的意思
1.有var前缀的,表示是实际存储空间是变长的,varchar,nvarchar 
所谓定长就是长度固定的,当输入的数据长度没有达到指定的长度时将自动以英文空格在其后面填充,使长度达到相应的长度;而变长字符数据则不会以空格填充,比较例外的是,text存储的也是可变长。 

不管是变长还是定长char(n) vchar(n) varchar(n) nvarchar(n), n定义的长度就是最大长度,超过会报错。

2.有n前缀的,n表示Unicode字符,即所有字符都占两个字节,nchar,nvarchar 字符中,英文字符只需要一个字节存储就足够了,但汉字众多,需要两个字节存储,英文与汉字同时存在时容易造成混乱,Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。

 

三、最大容量

1.nvarchar(n) : 包含 n 个字符的可变长度 Unicode 字符数据。n 的值必须介于 1 与 4,000 之间。字节的存储大小是所输入字符个数的两倍。所输入的数据字符长度可以为零。 

2.varchar[(n)]: 长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节。所输入的数据字符长度可以为零。

3.char,varchar 最多8000个英文,4000个汉字;nchar,nvarchar 可存储4000个字符,无论英文还是汉字.  Alt+F1 快捷键显示的是字节,所以N开头的要X2,

所以nchar(4000), nvarchar(4000), 快捷键显示的length是8000

 

四、选择问题

使用Nxx的一个非常好处就是在判断字符串的时候可以不需要考虑中英文两种字符的差别.当然,使用Nxx存储英文字符会增大一倍的存储空间.但是在存储代价已经很低廉的情况下,优先考虑兼容性会给你带来更多好处的.
所以在Design的时候应该尽量使用Nxx来存储数据.只有在你确保该字段不会保存中文的时候,才采用非Nxx来存储

 

 

posted @ 2023-01-06 11:20  Mark_Luo  阅读(80)  评论(0编辑  收藏  举报