C#版机房重构——数据类型

前言

        上篇博客说到了设计数据库的物理模型,物理模型里面的数据类型是根据什么来的呢?这篇博客就来说道一下这个问题。

        一般我们机房收费系统中,用到的大多是string类型,在sql server中对应char、varchar、nchar、nvarchar、text、ntext六种类型。接下来我们就来讨论一下这六种类型。

        在介绍这六种类型之前,首先我们来介绍一下Unicode。

Unicode

        Unicode 是为了解决传统的字符编码方案的局限而产生的,例如ISO 8859所定义的字符虽然在不同的国家中广泛地使用,可是在不同国家间却经常出现不兼容的情况。通俗来讲,如果世界各地的编码语言都是方言,那么Unicode就是联合国统一规划的一种语言。在这种语言环境下,不会再有语言的编码冲突,在同屏下,可以显示任何语言的内容,这就是Unicode的最大好处。

        说了这么多可能还不太明白,在数据库中,英文字符和数字只需要一个字节存储,但汉字等非英文字符则需要两个字节存储。如果英文与汉字同时存在,占用空间数不同,就容易造成混乱,导致读取出来的字符串是乱码。

        Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。而前缀n就表示Unicode字符,比如nchar就使用了Unicode字符集。这就是说在我们设计数据库的时候如果存储的是中文英文混合的那么应该使用nchar,而当遇到的仅为英文时(包含数字,西文字符)时用char。

        说完了Unicode,再说这几个类型就好说了。由于上述6个类型中,三个使用了Unicode字符集,功能大家也就知道了,所以接下来只需要介绍三个:char、varchar、还有text就行了。这其中,还有两个比较类似的,对,就是char和varchar,接下来区分它们两个。

定长和不定长

        这就是char和varchar的区别,char是定长的,我们都在数据库中遇到过,比如我们定义一个char(10)的数据,当我们的数据为五个字符,它会占用10个字符的长度,没被占用的字符用空格代替了。相反,如果是varchar(10)的话,数据为几个字符,在数据库中就会实际占用几个字符。我们在第一遍机房的时候都有感受,有时候输出的数据要加Trim才可以,就是这个原因。

        但是,并不是不定长就一定比定长好,因为不定长的存储是以牺牲存储效率来实现的,这时候就要我们来权衡了,如果觉得效率重要,就用定长,觉得存储空间重要,就用不定长。

Text

        text存储可变长度的非Unicode数据,最大长度为2^31-1(2,147,483,647)个字符。在机房收费系统中,我们一般不会用到text这个类型,暂不讨论。

总结

        现在,对于类型的使用,大家应该非常清楚了吧 *(^)*。

你可能感兴趣的:(C#,数据类型,机房重构)