工作了三年多,第一次跑来写博客,以前工作中遇到的问题,都没有整理过,从今天起,无论是在学习中还是在工作中,都希望能够通过博客记录一下自己的笔记以及体会。
作为开发人员,要做数据库设计,是避免不了的,但在定义表结构的时候,在选择数据类型时,会发现有几个类型很相似,就是char、nchar、varchar、nvarchar、text、ntext类型。开始的时候我也没有多在意,也没有去查过或者测试过他们的区别,现在我就给他们做个简单的分析,如果有不对的地方,希望大家多多指教。
char:是定长的,当你输入的字符小于定义的长度的时候,他会在后面补空格。如char(10)中,最多存取5位中文字符,或者10位英文或数字字符,即中文字符占2个长度,英文或数字占1个长度。
nchar:定长的,同char,小于定义长度则补空格,不同的是,比char多了个“N”,表示存储的是Unicode数据类型的字符,nchar(10)中,最多存取10位中文、英文或数字字符,即中文、英文或数字都是占1个长度。
由于char和nchar都是在小于定义长度时补空格,所以往往读取的时候程序需要做一下 trim()的操作。
varchar:存储变长的数据。当你存储的数据是变长的,且不超过一个固定的长度n时,则可定义长varchar(n),而实际上,varchar的长度是n+1,还有1个长度是用来保存实际使用了多少长度。
nvarchar:同char和nchar的区别,中文字符在varchar中占2个长度,在nvarchar中占1个长度。
text:存储变长的数据。最大长度为2^31-1个字符
ntext:同char和nchar的区别,文字符在text中占2个长度,在ntext中占1个长度。
如下图的测试中可见:
除了上面的测试和提到的区别,我还查询了一些相关的资料,这里只做一下简单的笔记说明。
char字段的索引效率级高,而varchar虽然没有char高,但是和char相比其实处理速度是差不多的。
而索引中列总长度最多为900字节,所以长度大于900的char、varchar和大于450的nchar、nvarchar会无法创建索引
text、ntext上也是无法创建索引的。
多了个n开头的类型,速度上都会慢一些,比如nvarchar要比varchar处理起来慢些。
在选择上,我总结一下:
如果是纯英文或数字,就选择char、varchar,如果是中英文数字混合的,则可选择nchar、nvarchar
定长的则选择char、nchar,如性别字段,F\M则char(1),不定长的则选择varchar、nvarchar
如查询且希望索引的话,则长度定在400以内吧。
不需要做查询或索引的,也可考虑text和ntext。
像博客这样的内容字段,要把编辑器生成的html代码存取进去,可使用nvarchar(max)或者ntext字段。
本文介绍了SQL中几种常见的字符类型,包括char、nchar、varchar、nvarchar、text和ntext的区别。char和nchar是定长类型,存储时会补空格,适合英文或数字;varchar和nvarchar是变长类型,nvarchar支持Unicode,适合中英文混合。text和ntext用于存储大量文本,但无法创建索引。在选择时,需考虑数据类型、长度和是否需要索引。

587

被折叠的 条评论
为什么被折叠?



