【sql server 数据库】彻底区分char、 nchar、 varchar、 nvarchar它们之间的关系以及什么时候该用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jerry11112/article/details/85372187

前言:

对于数据库中char、 nchar、 varchar、 nvarchar这四个类型之间很多人都能说个大概,但是细小的部分还是不够详细,或有些混淆!所以特来总结一下!

1、四者之间的区别:

首先明确一点,这四个类型 可以存储任何语言,不是说varchar,char只能英文,这个可以自己去数据库去实践。

在了解之前我们先简单的学习一下ANSI与Unciode,ANSI它的字符采用8bit,UNICODE采用的是16bit

对于字符来说ANSI以单字节存放英文字符,以双字节存放中文等字符,而Unicode下,英文和中文的字符都以双字节存放)
如果还是感觉抽象,那么看下面的图:M是一个英文字母 ,如果用ANSI存储那么它存储的空间为8bit,如果用Unicode那么它的存储空间是16位,同样是字母,Unicode就要比ANSI多用上一倍的空间!
在这里插入图片描述

但是如果是一个中文字符,那么ANSI就要用两个它原来的空间将它存下,而Unicode还是原来的一个空间就可以存下!

在这里插入图片描述

了解了ANSI与Unicode的区别接下来看四个类型的区别

char: 固定长度,存储ANSI字符,不足的补英文半角空格。

举个简单的例子 char(2) 表示的是两个字节,如果我要存储一个英文,那么它就会自己补一个空格,如果是一个汉字就不会补空格,一个空格就是8bit;

nchar: 固定长度,存储Unicode字符,不足的补英文半角空格

nchar(2)表示的是两个字节,它可以存一个英文或者汉字,或者其它的符号,文字,不会补任何的空格

varchar: 可变长度,存储ANSI字符,根据数据长度自动变化。

v archar(2) 表示的是两个字节,如果我要存储一个英文,那么它就不会补空格,存储的空间就是8bit,如果存储一个文字,那么它的空间就是16bit,它的长度是可变的

nvarchar: 可变长度,存储Unicode字符,根据数据长度自动变化。

nvarchar(2) 表示的是两个字节,它可以存一个英文或者汉字,或者其它的符号,文字,不会补任何的空格
但是只能存一个,意思就是任何一个字符在我这里就是两个字节

但是这里肯定会有人问,它们都可以存储各种语言,带n的nchar与nvarchar完全没用啊,还浪费空间,这里在说一个知识点,就是这个n表示的是unicode,它的意思就i是万国码,16位去表示一个字符,功能表示65535个字符,这样世界上所有的符号都可表示出来了,而ANSI只能去表示255个字符,它适用于英文,数字,或者其它的一些符号! 如果我们存储中文数据或者其它国家的一些语言的时候,我们用varchar存储有可能会出现乱码,但是用nchar与nvarchar就不会出现乱码,所以这就是nchar与nvarchar的作用!

2、总结一下:

如果你肯定存储的数据长度,而且不包中文的,可以用char类型。比如存储的字符只能yes和no的缩写Y和N;

如果肯定存储的数据长度,但可能包括中文,可以用nchar类型。比如存储的字符为性别:只能是男或者女

如果不确定存储的数据长度,存储只有英文、数字的最好用varchar ,比如:卡号、身份证号

如果不确定存储的数据长度,也有可能有中文,可以选择nvarchar类型 ,比如姓名,年级;

如果你做的项目可能涉及不同语言之间的转换,建议用nvarchar

猜你喜欢

转载自blog.csdn.net/jerry11112/article/details/85372187