当你存入的数据长度固定的时候用char,
不固定的时候用varchar比方说:
存放1位的标志位,用char(1)
不用datetime而用8位字符存放日期那么用char(8)存放备注或者说明,因为事先并不知道会有多少。 那么用varchar(200)
但是备注或者说明最好用nvarchar,以便和国际接轨。char的好处是速度快,但是未存满,它会补空格。
varchar的好处是变长,未存满不会不空格,以便节省存储空间。

解决方案 »

  1.   

    当你存入的数据长度固定的时候用char,
    不固定的时候用varchar比方说:
    存放1位的标志位,用char(1)
    不用datetime而用8位字符存放日期那么用char(8)存放备注或者说明,因为事先并不知道会有多少。 那么用varchar(200)
    但是备注或者说明最好用nvarchar,以便和国际接轨。char的好处是速度快,但是未存满,它会补空格。
    varchar的好处是变长,未存满不会不空格,以便节省存储空间。
      

  2.   

    当你存入的数据长度固定的时候用char,
    不固定的时候用varchar比方说:
    存放1位的标志位,用char(1)
    不用datetime而用8位字符存放日期那么用char(8)存放备注或者说明,因为事先并不知道会有多少。 那么用varchar(200)
    但是备注或者说明最好用nvarchar,以便和国际接轨。char的好处是速度快,但是未存满,它会补空格。
    varchar的好处是变长,未存满不会不空格,以便节省存储空间。
      

  3.   

    楼上说的不错,一般都是存入固定长度的数据时用char,
    不固定的时候用varchar
      

  4.   

    偶的做法只要是存放的字段是象性别只有男女的——char
    一般的譬如标题的——varchar
    文本的——text
      

  5.   


    如果希望列中的数据值大小接近一致,请使用 char。如果希望列中的数据值大小显著不同,请使用 varchar。 如果执行 CREATE TABLE 或 ALTER TABLE 时 SET ANSI_PADDING 为 OFF,则一个定义为 NULL 的 char 列将被作为 varchar 处理。 联机帮助
      

  6.   

    如果使用 char 或 varchar: 如果希望列中的数据值大小接近一致,请使用 char。如果希望列中的数据值大小显著不同,请使用 varchar。 如果执行 CREATE TABLE 或 ALTER TABLE 时 SET ANSI_PADDING 为 OFF,则一个定义为 NULL 的 char 列将被作为 varchar 处理。 联机帮助
      

  7.   

    Char和VarChar其实不太需要考虑区别,只有字段中有大量数据都比较短,但某个数据长度非常长的时候才考虑他们的不同,其实它们两个在运算速度上几乎没什么分别,以前总说CHAR稍微快点,其实也就是快那么稍微一点。我得到的结论是,如果字段中所有数据的长度都一样(比如字符串编码)那么用CHAR,否则用VARCHAR
      

  8.   

    用CHAR在做字符串比较,比如取MAX MIN等时对你有好处
      

  9.   

    varchar 是可变长度的数据类型。比列的长度小的值,不会按照列的长度在其右边填补。当创建列时,如果 ANSI_PADDING 选项设为 OFF,则所有存储在列中的字符值的尾随空格都将被截断。当创建列时,如果 ANSI_PADDING 设为 ON,则尾随空格不被截断。CHAR 函数可以把一个整数转换为 ASCII 字符。当确定控制字符时(比如回车或换行),这是很有用的。在字符串中用 CHAR(13) 和 CHAR(10) 产生一个回车并生成一个新行。 PRINT 'First line.' + CHAR(13) + CHAR(10) + 'Second line.'
      

  10.   

    varchar 是可变长度的数据类型。比列的长度小的值,不会按照列的长度在其右边填补。当创建列时,如果 ANSI_PADDING 选项设为 OFF,则所有存储在列中的字符值的尾随空格都将被截断。当创建列时,如果 ANSI_PADDING 设为 ON,则尾随空格不被截断。CHAR 函数可以把一个整数转换为 ASCII 字符。当确定控制字符时(比如回车或换行),这是很有用的。在字符串中用 CHAR(13) 和 CHAR(10) 产生一个回车并生成一个新行。 PRINT 'First line.' + CHAR(13) + CHAR(10) + 'Second line.'
      

  11.   

    大家谈的都不错,Char是固定长度,VarChar不固定长度。当长度不固定时用VarChar可以节省空间。
      

  12.   

    偶做了一个对比
    char类似于C++\C#中的char,不同的是sql server中的char的长度>=1
    varchar类似于C++\C#中的string
    呵呵,不知道有没有道理。
      

  13.   


      定常char
    变长varchar
      
     
      

  14.   

    一般都是存入固定长度的数据时用char,
    不固定的时候用varchar
      

  15.   

    当数据之间的长度差别不是很大时用char(n),差别很大时用varchar(n), 性能差别不是很大
      

  16.   

    ===========================================================
    ANSI_PADDING当设置为 ON 时,不剪裁字符值中插入到 varchar 列的尾随空格和二进制值中插入到 varbinary 列的尾随零。不将值按列的长度进行填充。当设置为 OFF 时,剪裁 varchar 列的尾随空格和 varbinary 列的尾随零。该设置只影响新列的定义。 SET ANSI_PADDING 为 ON 时,将允许空值的 Char(n) 和 binary(n) 列填充到列长,而当 SET ANSI_PADDING 为 OFF 时,将剪裁尾随空格和零。始终将不允许空值的 Char(n) 和 binary(n) 列填充到列长。 重要  建议始终将 ANSI_PADDING 设置为 ON。在计算列或索引视图上创建或操作索引时,SET ANSI_PADDING 必须为 ON。 此选项的状态可通过检查 DATABASEPROPERTYEX 函数的 IsAnsiPaddingEnabled 属性来确定。
    ===========================================================
    这是SQL Server 2000 Help上写的,是不是VarChar在做Index时效果比较差?因为如果SET ANSI_PADDING =ON,那不就和Char差不多了,其实Char与VarChar的差别对于开发人员来说最大的差别就是会不会自动填充Space,否这对于一个几百兆的数据库,磁盘空间更本算不了什么,不知道我说的对不对
      

  17.   

    还有,大家会用VarChar做PK吗?
      

  18.   

    俺通常只用Varchar、NVarchar,除非真的有必要使用Char
    Varchar要灵活得多,可扩展性好
      

  19.   

    在使用方便性上,当数据长度固定时用char要好些,而当长度会变化时用vchar要好些,而二者间的性能几乎没什么差异。