char(n)和(n)的区别:
在这里我们可以清楚的看到他们表面的区别就是前面是否有var,在这里解释一下var是什么意思,var代表“可变的”的意思
下面看个例子:
char(4)//char代表的是字符的意思,这在Java中学过,一个汉字代表一个字符,2个字节;一个英文代表一个字符,一个字节。而这里char(n),(除了它,其余三个都是如此)n是代表字节数,现在我们假如存储‘abcd’(4个字节,所以可以存储),再假如存储‘中国你好’(8个字节,所以不能存储),再假如存储‘ab’(由于是有四个字节,而现在ab只占两个字节,所以用两个空格补上后面的两个字节,所以数据库的数据为‘ab ’)
(4)//同样我们以上面的例子举例,假如存储‘abcd’(4个字节,所以可以存储),再假如存储‘中国你好’(8个字节,所以不能存储),再假如存储‘ab’(由于是有四个字节,而现在ab只占两个字节,然而(n)是由var开头的,数据是可变的,所以不用像char(4),用空格补字节的方法,而是可以直接省略空格,所以数据库的数据还是‘ab’)
nchar(n)和(n)
同样我们先弄清楚以n开头的数据类型是什么意思,已n开头表示此字符是编码的格式,不是以n开头的自然不是编码格式。我们在前面说过,括号里面的n是代表字节数,而在这里,由于是编码格式,所以n代表2n个字节数,同样以上面的例子举例:
nchar(4)//既然是编码格式并且不是可变的,所以总共可以存储2*4=8个字节,我们现在假如存储‘abcd’(由于是只占四个字节,所以在数据库中的数据为‘abcd ’),假如存储‘中国你好’(则完全可以存放)
(4)//既然是编码且为可变的,所以存储‘abcd’(在数据库中的数据为‘abcd’,不会再补空格)
最后,总结一下,var代表可变的,n开头代表是编码。
二、第二种
1、char:
固定长度的非字符数据,最大长度为8000个字符。
2、:
可变长度的非数据,最长为8000个字符。
3、:
可变长度数据,其最大长度为4000字符。
4、nchar:
固定长度的数据,最大长度为4000个字符。
5、char和都是字符串类型的:
用编码的字符串,结果是字符的整数值
用法区别:
文字字段若长度固定,如:身分证号码,就不要用或,应该用char或nchar。
支持多语言的站点应考虑使用 nchar或数据类型以尽量减少字符转换问题
文字字段若长度不固定,如:地址,则该用或。除了可节省存储空间外,存取硬盘时也会较有效率。
第三种:
1、char。char存储定长数据很方便,char字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间,不足的自动用空格填充,所以在读取的时候可能要多次用到trim()。
2、。存储变长数据,但存储效率没有cahr高。如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义(10)是最合算的。类型的实际长度是它的值的实际长度+1。为什么“+1”呢?这一个字节用于保存实际使用了多大的长度。从空间上考虑,用合适;从效率上考虑,用char合适,关键是根据实际情况找到权衡点。
3、text。text存储可变长度的非数据,最大长度为2^31-1(2,147,483,647)个字符。
4、nchar、、ntext。这三种从名字上看比前面三种多了个“n”。它表示存储的是数据类型的字符。我们知道字符中,英文字符只需要一个字节存储就足够了,但汉字众多,需要两个字节存储,英文与汉字同时存在时容易造成混乱,字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。nchar、的长度是在1到4000之间。和char、比较起来,nchar、则最多存储4000个字符,不论是英文还是汉字;而char、最多能存储8000个英文,4000个汉字。可以看出使用nchar、数据类型时不用担心输入的字符是英文还是汉字,较为方便,但在存储英文时数量上有些损失。
所以一般来说,如果含有中文字符,用nchar/,如果纯英文和数字,用char/
我把他们的区别概括成:
char,nchar定长,速度快,占空间大,需处理
,,text不定长,空间小,速度慢,无需处理
nchar、、ntext处理码
参考: