如有一个字段为varchar(9),输入abc,占三个字节;若改为varchar(900),同样输入abc,同样也占三个字节;既然一个字段定义为varchar(9)和varchar(900)占用空间都一样,为何不都定义为varchar(MAX)省事呢?

解决方案 »

  1.   

    如果定义varchar(MAX),就占5个字节
      

  2.   

    Varchar 对每个英文(ASCII)字符都占用2个字节,对一个汉字也只占用两个字节
    char 对英文(ASCII)字符占用1个字节,对一个汉字占用2个字节Varchar 的类型不以空格填满,比如varchar(100),但它的值只是"qian",则它的值就是"qian"
    而char 不一样,比如char(100),它的值是"qian",而实际上它在数据库中是"qian "(qian后共有96个空格,就是把它填满为100个字节)。由于char是以固定长度的,所以它的速度会比varchar快得多!但程序处理起来要麻烦一点,要用trim之类的函数把两边的空格去掉!而varchar(max)实际上是varchar(n)的一种变形,他的存储大小是输入数据的实际长度加 2 个字节
      

  3.   

    好像Varchar 对每个英文(ASCII)字符也只用一个字节吧,nvarchar才是两个字节。
    我的意思是varchar(n)里的n对存储空间有影响吗?因为varchar是按实际输入的字符来算的,而不管n为多少。
      

  4.   


    look this is difference
      

  5.   

    varchar(09) 只能输入 《= 9个字节 , 多出来会自动截断ex: declare @s varchar(09)
     select @s = '9999999999888888888888888'
     select @s  --- 运行下就知道了