注意:
是char(1)与varchar(1)的区别,不是谈char类型与varchar类型的区别
存储方面就不用再谈了,
可以谈谈设计,使用中char(1),varchar(1)的异同点,选用原则,优缺点等以上都是针对长度为1的情况下

解决方案 »

  1.   

    如果是char(1),varchar(1),我个人认为在各个方面几乎相同,没什么差异.而且对数据库或程序几乎不造成什么影响.如果有差异,就是空格和非空格的问题.
      

  2.   

    char(1)与varchar(1)应该没什么差别吧!长度大了才有明显的差别~
      

  3.   

    varchar(1) 
    char(1)
    相同点:都是存储一字节字符
    不同点:varchar输入的长度为<=1字节,char=1字节(当输入内容小于1字节时会产生1字节的空格)
      

  4.   

     1.CHAR的长度是固定的,而VARCHAR2的长度是可以变化的, 比如,存储字符串“abc",对于CHAR (20),表示你存储的字符将占20个字节(包括17个空字符),而同样的VARCHAR2 (20)则只占用3个字节的长度,20只是最大值,当你存储的字符小于20时,按实际长度存储。 
     2.CHAR的效率比VARCHAR2的效率稍高,因为起定长的缘故。
     3. char(1)与varchar(1)没什么区别,差异在空格或者非空格了
    declare @a varchar(1),@b char(1)
    set @a=''
    set @b=''
    select datalength(@a),datalength(@b)
    /*
                
    ----------- -----------
    0           1(1 行受影响)
    */
      

  5.   

    我是进来学习的,工作中用VARCHAR更多
      

  6.   

    我是进来学习的,工作中用NVARCHAR更多
      

  7.   

    varchar(1) 相对 char(1) 不但没有优势,还会拖累性能。在存储上, varchar 类型需要 2 个字节的额外空间来跟踪存储字符串的长度,这样 varchar(1) 实际占用的是 3 个字节。因此,varchar(1) 要比 char(1) 占用更大的空间,在同等环境下便可能消耗更多的 i/o。这个应该是 varchar 类型的优势,但对 varchar(1) 确实劣势。在性能上,SQL Server 在处理 char 类型上也要比处理 varchar 快一点(如,某些 update 操作,对 char 类型便是占位更新,而对 varchar 便会造成分页)。这一点网上有很多论述。
      

  8.   


    定长的用char,比如身份证号(18/15)、手机号(11)、区号(4)员工编号
    不定长的用varchar,比如备注等
    差不多了吧。。
      

  9.   

    选用原则:一般都用varchar,用char需求一变化就要改啦。。
      

  10.   

    定长用char,变长用varchar. --从性能来说用char, 从设计来说来用varchar.
    当海量数据的时候,且数据绝大部分都是定长的话,char 带来的优势马上立竿见影。如:查询性能,数据空间,索引空间,备份时间,备份文件空间,恢复时间。等等
      

  11.   

    接触下来都是用varchar
    能定长是数据非常非常少
    而且如果位数改变就需要涉及到数据表修改
      

  12.   

    如果 就是 一个字符长度 有必要用 var 
      

  13.   

    程序判断上稍有区别
    当用户输入A,提交后,又删除A,提交后,varchar(1)是空字符串(oracle中不存在空字符串)
    char(1)是1个空格create table ttt(char1 char(1),varchar1 varchar(1))insert ttt select'A','A'
    update ttt set char1='',varchar1=''select ascii(char1),ascii(varchar1) from ttt                        
    ----------- ----------- 
    32          NULL(所影响的行数为 1 行)
      

  14.   

    我是进来学习的,工作中用VARCHAR更多
      

  15.   

    不是谈char类型与varchar类型的区别
    存储方面就不用再谈了,
    可以谈谈设计,使用中char(1),varchar(1)的异同点,选用原则,优缺点等
    那谈什么呢?如果不考虑 存储方面 则没什么可比的了
      

  16.   

    char(1)保证无字符时有空格填充.
    char与varchar区别LZ已清楚,请LZ将自己考虑的问题列出,使问题更清晰
      

  17.   

    1、变长与定长的一般规则 :变长用于存储长度变化差异明显并变动不频繁的列
    2、大家说的性能的差异,的确在存储上的开销变长一定是要额外的开销,也就是维护那个偏移,其实对SQL来说这种额外的开销基本可以忽略的,或说在一般系统上这种开销不会造成明显的影响 。如果不是1,那相反变长可能带来性能的提升,IO及缓存命中效率高才是我们想要的。但是你这个是1,并且不明白你的这个列用于什么用途。
    3、变长的潜在危险就是可能的页面折分与数据的搬移,这才是一个大的潜在开销。
    4、上面有朋友提到IO,那这个还要看你的行大小,如果你这个1对于一个行大小为4048时,IO和缓存一点也得不到提升
    5、综上所述,如果你N = 1 ,不要再讨论了
      

  18.   

    我是进来学习的,发现公司的人事系统全用的VARCHAR!
      

  19.   

     1.CHAR的长度是固定的,而VARCHAR2的长度是可以变化的, 比如,存储字符串“abc",对于CHAR (20),表示你存储的字符将占20个字节(包括17个空字符),而同样的VARCHAR2 (20)则只占用3个字节的长度,20只是最大值,当你存储的字符小于20时,按实际长度存储。 2.CHAR的效率比VARCHAR2的效率稍高,因为起定长的缘故。 3. char(1)与varchar(1)没什么区别,差异在空格或者非空格了 declare @a varchar(1),@b char(1) set @a='' set @b='' select datalength(@a),datalength(@b) /*  ----------- ----------- 0 1 (1 行受影响) */呵呵。解释的够明白l
      

  20.   

    其实varchar和char真的就是不填充空格和填充空格的区别,还有就是在海量数据的时候char对查询速度有优势,但是平常都用varchar,因为它不像char(不管你输入的数据时小于或者等于字节时候都占用一字节的空间)一样...
      

  21.   

    学习,用CHAR 感觉太单调固定