SQL server 中的那些*char*们

来源:互联网 发布:iptv网络电视怎么更新 编辑:程序博客网 时间:2024/05/17 09:32

        在机房验收时,师傅问了我关于各种char类型有什么区别的问题,虽然之前看到过,但还是不是很理解。经师傅一讲解,感觉一下子通了。。。再看别人整理的也差不多,所以转载一篇做个纪念。。。

        【知识点】

       首先就是Char(),使用指定长度的固定长度表示的字符串;比如char(8),则数据库会使用固定的1个字节(八位)来存储数据,不足8位的字符串在其后补空字符。就是说,char(8)就是给8位来存储,不管你是几位数,都是用8位字符来表示。
       接下来就是varchar()了,加了个var(variety变化的简写),意思就是可变字符串,比如varchar(20),就是说你最大可以存20个字符,你实际有多少个字符,就给你安排多少个加一的字符的空间。下面会讲到为什么是加一。
       然后就是nvarchar()了,加了个n,表示这个字符串的编码是unicode编码方式。它的存在是为了字符集中不兼容的问题而产生的。它所有的字符都是用两个字节来表示,即英文字符也是用两个字节来表示
还有一个就是text了,当要存的东西text存储可变长度的非Unicode数据,最大的长度为2^31-1个字符,总之就是要存储的很大的话,就要用text了。
         char()和varchar()的区别
          varchar比char节省空间,在效率上比char会稍微差一些,即要想获得效率,就必须牺牲一定的空间,这也就是我们在数据库设计上常说的‘以空间换效率’。在varchar()类型的数据列里,每个值只占用刚好够用的字节再加上一个用来记录其长度的字节(即总长度为L+1字节)在varchar(M)类型的数据列里,每个值只占用刚好够用的字节再加上一个用来记录其长度的字节(即总长度为L+1字节). 
        varcahr()和nvarchar()
        两字段分别有字段值:我和coffee
        那么varchar字段占2×2+6=10个字节的存储空间,而nvarchar字段占8×2=16个字节的存储空间。如字段值只是英文可选择varchar,而字段值存在较多的双字节(中文、韩文等)字符时用nvarchar。

        如果布署的主机是英文操作系统,并且不支持中文环境,那问 题就出来了.所有的varchar字段在存储中文的时候都会变成乱码(显示为??).而且一般情况下你不会知道这是因为你采用了错误的数据类型来存储所造 成的,你会试着去装中文字体,试着去设置操作系统的语言环境...这些都不能解决问题,唯一能解决问题的是把数据库字段的类型个性为nvarchar(或 者nchar) 

        【小结】

        所以一般来说,如果含有中文字符,用nchar/nvarchar,如果纯英文和数字,用char/varchar

        如果有n,就是说要存储的是Unicode的编码了,如果有var就是说是可变类型了。

        原博链接

0 0