MSSQL 基础之善用Char类型

浏览: 3090

引言

今天为什么要开题来说Char类型呢?在近几天的社区问题中发现,有些朋友对char、varchar、nvarchar这几种字符类型的特性还不是很清楚。以至在实际的使用中,不可避免的产生了一些问题。

类型介绍

char类型

char(n)类型,长度是固定,索引效率高,n介于1-8000之间的数据。假设为char(10)的变量存储一个"abc"字符串,那么实际存储为abc+7个空字符。所以在使用时如果不希望有空字符可以使用Rtrim去掉空字符。

declare @content char(10)
select 1, @content,len(@content)
set @content = 'abc'
select 2, @content,len(@content)
select 3, @content + '_end'
select 4, rtrim(@content)+'_end'


varchar类型

varchar(n)类型,可变长度,所谓可变长并不是真的可以任意变长,而是相对于char类型的固定占位而言,最大长度不能超出定义长度。n介于1-8000之间的数值。注意标红部分。

declare @content varchar(10)
select 1, @content,len(@content)
set @content = 'abc'
select 2, @content,len(@content)
select 3, @content + '_end'
select 4, rtrim(@content)+'_end'
set @content = N'6급'
select 5, @content


nvarchar类型

nvarchar(n)类型,可变长Unicode类型。一个字符使用两个字节存储,所以能够存储西方和特殊字符而不致产生乱码。n介于1-4000之间的数值。注意标红部分。

declare @content nvarchar(10)
select 1, @content,len(@content)
set @content = 'abc'
select 2, @content,len(@content)
select 3, @content + '_end'
select 4, rtrim(@content)+'_end'
set @content = N'6급'
select 5, @content

扩展

写了这么多都还没有点到题目,是不是楼主是个标题党哇。呵呵,各位看官居莫怪,其实如何善用char类型已经在类型介绍中说过了。既然char类型长度固定,而且索引效率高,那么作为编码字段还是非常有用的,强调一点是固定长度编码。如:性别字典表,char(2) 01 表示男 02 表示女,如国家字典,char(4) 0001表示中国,0002表示韩国。千万注意一定不要存储成1,2,前置的0是不可省略的。

推荐 2
本文由 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

7 个评论

很清晰
悟

回复 ZanarKand

谢谢,初写博客多指正。
觉得好要点赞哦,我只是个passer-by,哈哈
varchar和nvarchar的区别很清楚,前面带n的都是Unicode型的

但有一点没搞明白的是为何char型的索引效率高呢javascript:;

char(10)就比用varchar(10)的索引效率高吗? why?
悟

回复 choc

char定长
choc

choc 回复

嗯,知道char定长

为啥定长效率就高呢?
悟

回复 choc

相对于varchar这种不定长的类型,他的处理要快,因为处理位数是固定的,像int类型。

要回复文章请先登录注册