char、varchar、nchar、nvarchar的区别
2015-05-30 16:14
267 查看
对于程序中的string型字段,SQLServer中有char、varchar、nchar、nvarchar四种类型来对应(暂时不考虑text和ntext),开建立数据库中,对这四种类型往往比较模糊,这里做一下对比。
1、定长或变长
所谓定长就是长度固定的,当输入的数据长度没有达到指定的长度时将自动以英文空格在其后面填充,使长度达到相应的长度;有var前缀的,表示是实际存储空间是变长的,比如varchar,nvarchar变长字符数据则不会以空格填充,比较例外的是,text存储的也是可变长。
以上说的可能大家还是不大理解,用一种通俗易懂的方法来说吧。
比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间;而varchar(10)是你用了几个字节就占几个字节。
2、Unicode或非Unicode
数据库中,英文字符只需要一个字节存储就足够了,但汉字和其他众多非英文字符,则需要两个字节存储。如果英文与汉字同时存在,由于占用空间数不同,容易造成混乱,导致读取出来的字符串是乱码。Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。而前缀n就表示Unicode字符,比如nchar,nvarchar,这两种类型使用了Unicode字符集。(即只要占用最少是俩哦,一对一对的。)
3、字段容量
char,varchar :最多8000个英文,4000个汉字
nchar,nvarchar :可存储4000个字符,无论英文还是汉字
4、使用
如果数据量非常大,又能100%确定长度且保存只是ansi字符,那么char
能确定长度又不一定是ansi字符或者,那么用nchar;
对于超大数据,如文章内容,使用nText
其他的通用nvarchar
大家明白了吗?以后再也不要稀里糊涂的用了。
1、定长或变长
所谓定长就是长度固定的,当输入的数据长度没有达到指定的长度时将自动以英文空格在其后面填充,使长度达到相应的长度;有var前缀的,表示是实际存储空间是变长的,比如varchar,nvarchar变长字符数据则不会以空格填充,比较例外的是,text存储的也是可变长。
以上说的可能大家还是不大理解,用一种通俗易懂的方法来说吧。
比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间;而varchar(10)是你用了几个字节就占几个字节。
2、Unicode或非Unicode
数据库中,英文字符只需要一个字节存储就足够了,但汉字和其他众多非英文字符,则需要两个字节存储。如果英文与汉字同时存在,由于占用空间数不同,容易造成混乱,导致读取出来的字符串是乱码。Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。而前缀n就表示Unicode字符,比如nchar,nvarchar,这两种类型使用了Unicode字符集。(即只要占用最少是俩哦,一对一对的。)
3、字段容量
char,varchar :最多8000个英文,4000个汉字
nchar,nvarchar :可存储4000个字符,无论英文还是汉字
4、使用
如果数据量非常大,又能100%确定长度且保存只是ansi字符,那么char
能确定长度又不一定是ansi字符或者,那么用nchar;
对于超大数据,如文章内容,使用nText
其他的通用nvarchar
大家明白了吗?以后再也不要稀里糊涂的用了。
相关文章推荐
- 浅析Oracle中char和varchar2的区别
- mysql如何处理varchar与nvarchar类型中的特殊字符
- sql中varchar和nvarchar的区别与使用方法
- 探究MySQL中varchar的定义长度
- c# StringBuilder.Replace 方法 (Char, Char, Int32, Int32)
- MySQL数据类型varchar详解
- mysql VARCHAR的最大长度到底是多少
- MySQL中CHAR和VARCHAR类型演变和详解
- Mysql varchar大小长度问题介绍
- mysql中char与varchar的区别分析
- php判断输入不超过mysql的varchar字段的长度范围
- C语言中的BYTE和char深入解析
- SQL2005中char nchar varchar nvarchar数据类型的区别和使用环境讲解
- SQL Server数据类型char、nchar、varchar、nvarchar的区别浅析
- 深入char、varchar、text和nchar、nvarchar、ntext的区别详解
- 深入研究mysql中的varchar和limit(容易被忽略的知识)
- int main(int argc, char *argv[])主函数参数
- MySQL CHAR和VARCHAR那些事
- MySQL的InnoDB引擎的索引知识小结
- Get和Post的区别