char 和 varchar
固定长度 (char) 或可变长度 (varchar) 字符数据类型。char[(n)]长度为 n 个字节的固定长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为 n 个字节。char 在 SQL-92 中的同义词为 character。varchar[(n)]长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节。所输入的数据字符长度可以为零。varchar 在 SQL-92 中的同义词为 char varying 或 character varying。注释
如果没有在数据定义或变量声明语句中指定 n,则默认长度为 1。如果没有使用 CAST 函数指定 n,则默认长度为 30。将为使用 char 或 varchar 的对象被指派数据库的默认排序规则,除非用 COLLATE 子句另外指派了特定的排序规则。该排序规则控制用于存储字符数据的代码页。支持多语言的站点应考虑使用 Unicode nchar 或 nvarchar 数据类型以尽量减少字符转换问题。如果使用 char 或 varchar: 如果希望列中的数据值大小接近一致,请使用 char。
如果希望列中的数据值大小显著不同,请使用 varchar。 
如果执行 CREATE TABLE 或 ALTER TABLE 时 SET ANSI_PADDING 为 OFF,则一个定义为 NULL 的 char 列将被作为 varchar 处理。 当排序规则代码页使用双字节字符时,存储大小仍然为 n 个字节。根据字符串的不同,n 个字节的存储大小可能小于 n 个字符。

解决方案 »

  1.   

    简单地说.
    CHAR默认长度为10,如果你输入的数据长度不到10,比如说只有6个,他会自动补加空格,在MS-SQL
    里, 这样,你的保存数据就非你原来想的那样了.
    而VARCHAR默认长度为50,它就不会出现CHAR那样的问题.原始是什么数据保存就是什么数据.
    OVER,偶从实践中得出的.....
      

  2.   

    建个数据表,添加一条数据。在数据库中你会发现定义char(10)是自动补充空格的 而varchar2(10)则不是这样。
      

  3.   

    建个数据表,添加一条数据。在数据库中你会发现定义char(10)是自动补充空格的 而varchar2(10)则不是这样。
      

  4.   

    nchar,nvarchar则是Unicode的变量。
      

  5.   

    char    固定长度的非Unicode字符数据,最大长度为8000字符。所需空间是0到8000字符,具体取决于定义。
      

  6.   

    varchar   可变长度的非Unicode字符数据,最大长度为8000字符。存储大小是输入数据的实际长度。
      

  7.   

    宝宝说的char的字符范围说的不是很严密,不是1到8000,而是0到8000。
      

  8.   

    那我定义的是varchar(10),能不能输入多于10个字符?
      

  9.   

    那我定义的是varchar(10),能不能输入多于10个字符?好多问题问的时候自己可以先测1一下的,我帮你测一下:
    declare @a varchar(10)
    set @a='12345678901'
    select @a
    ----------测试结果-----------
    1234567890
      

  10.   

    上面说的还不够明确。我这样说:比如字符a 在char里面就是10个字节,在VARCHAR里面就是1个字节,ab在 char也是10个字节,在VARCHAR就是2个字节。
      

  11.   

    回复人: tequila79(极地之光) ( ) 信誉:100  2004-04-06 18:14:00  得分:0 
     
     
      宝宝说的char的字符范围说的不是很严密,不是1到8000,而是0到8000。
      
     
    还是测一下:
    declare @a varchar(0)
    set @a='12345678901'
    select @a
    ---------测试结果----------
    服务器: 消息 1001,级别 15,状态 1,行 1
    第 1 行: 长度或精度说明 0 无效。
    服务器: 消息 137,级别 15,状态 1,行 3
    必须声明变量 '@a'。
    服务器: 消息 137,级别 15,状态 1,行 3
    必须声明变量 '@a'。
    ps:我贴的是联机帮助上面的!