SQL Server 2005是微软五年磨一剑的产品,推出之后赞誉声一片。确实,相比sql server 2000,2005有了长足的进步,算是从娃娃长大成人了,可是,一些儿时的坏习惯,依然如故啊。
在SQL Server 2000中,数据行不能跨越页边界(参考:http://ningoo.itpub.net/post/2149/205525),所以限制了一行数据最大只能8060字节,到了2005,微软对于字符类型做了改进,号称原来8k的varchar,通过新的varchar(max)可以支持到2G大小,从此可以使用varchar(max)来替代text了,好消息。
可是,数据行的限制呢?依然存在,不知道这个历史遗留问题,是修改的难度太大,还是微软故意忽视了?
create table big(a char(4000),b char(4000),c char(4000))
Msg 1701, Level 16, State 1, Line 3
Creating or altering table 'big' failed because the minimum row size would be 12007, including 7 bytes of internal overhead. This exceeds the maximum allowable table row size of 8060 bytes.
显然,微软对于varchar(max)类型做了另外的处理,应该是象Oracle的行外LOB一样,在数据行中存了一个指针指向varchar(max)实际存储位置。既然已经能实现行数据链接,为什么还要将行限制在一个页内?
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/193161/viewspace-50334/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/193161/viewspace-50334/