是变长数据我知道,但我对他的“长度”不太理解,比如一个字段,我选了varchar类型,而长度我选了50的话,那它是以下哪种意思呢?
    1)不管有没有数据,每条记录都为这个字段准备了50个字节的空间,即使字段值为空。万一这个字段的值超过了50字节,那sql server再为它增加空间来存放。
    2)如果没有数据(为空),sql server就不为这个字段安排空间;如果有值,sql server再为它准备空间来放它,但最多不超过50字节。    是以上哪种意思啊?

解决方案 »

  1.   

    固定长度或可变长度的字符数据类型。 char [ ( n ) ] 
    固定长度,非 Unicode 字符数据,长度为 n 个字节。n 的取值范围为 1 至 8,000,存储大小是 n 个字节。char 的 SQL 2003 同义词为 character。varchar [ ( n | max ) ] 
    可变长度,非 Unicode 字符数据。n 的取值范围为 1 至 8,000。max 指示最大存储大小是 2^31-1 个字节。存储大小是输入数据的实际长度加 2 个字节。所输入数据的长度可以为 0 个字符。SQL-2003 中的 varchar 就是 char varying 或 character varying。
      

  2.   

    是   2)如果没有数据(为空),sql server就不为这个字段安排空间;如果有值,sql server再为它准备空间来放它,但最多不超过50字节楼主可以查查联机丛书
    varchar[(n)]长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节。所输入的数据字符长度可以为零。varchar 在 SQL-92 中的同义词为 char varying 或 character varying。
      

  3.   

    yin固定长度或可变长度的字符数据类型。char [ ( n ) ] 
    固定长度,非 Unicode 字符数据,长度为 n 个字节。n 的取值范围为 1 至 8,000,存储大小是 n 个字节。char 的 ISO 同义词为 character。varchar [ ( n | max ) ] 
    可变长度,非 Unicode 字符数据。n 的取值范围为 1 至 8,000。max 指示最大存储大小是 2^31-1 个字节。存储大小是输入数据的实际长度加 2 个字节。所输入数据的长度可以为 0 个字符。varchar 的 ISO 同义词为 char varying 或 character varying。备注
    如果未在数据定义或变量声明语句中指定 n,则默认长度为 1。如果在使用 CAST 和 CONVERT 函数时未指定 n,则默认长度为 30。将为使用 char 或 varchar 的对象指派数据库的默认排序规则,除非使用 COLLATE 子句指派了特定的排序规则。该排序规则控制用于存储字符数据的代码页。如果站点支持多语言,请考虑使用 Unicode nchar 或 nvarchar 数据类型,以最大限度地消除字符转换问题。如果使用 char 或 varchar,建议执行以下操作:如果列数据项的大小一致,则使用 char。
    如果列数据项的大小差异相当大,则使用 varchar。
    如果列数据项大小相差很大,而且大小可能超过 8,000 字节,请使用 varchar(max)。
    当执行 CREATE TABLE 或 ALTER TABLE 时,如果 SET ANSI_PADDING 为 OFF,则定义为 NULL 的 char 列将作为 varchar 处理。当排序规则代码页使用双字节字符时,存储大小仍然为 n 个字节。根据字符串的不同,n 个字节的存储大小可能小于 n 个字符。
      

  4.   

    通俗的说:
    VARCHAR(SIZE) 是变长的字符串类型。 最大长度为SIZE设定。
    根据用户的输入动态的分配内存空间。
      

  5.   

    应该是第二种解释!
    2)如果没有数据(为空),sql server就不为这个字段安排空间;如果有值,sql server再为它准备空间来放它,但最多不超过50字节。 
      

  6.   

    null占空间问题结论:定长占用空间,不定长不占用空间。 PS:不定长因为字段从较长往较短的update情况下会出现差值引起的空间的浪费;
    而另外因为null不占空间,当null变为非null以及从短望长的update中都会出
    现整条数据位置变化,原来的位置空间被抛弃,而引起较大的空间浪费。
      

  7.   

    基本是第二个。
    不过,感觉为NULL的话应该还是占空间的。