SQLServer2005 varchar 长度 问题
SQLServer2005 中数据类型
varchar 长度最大可以到8000
其存储策略是按需存储 例如有300字节就使用300字节 另外有两个字节存储内容的偏移
我的问题是
既然这样 那我们设计时都把varchar设为8000行么?
反正是按需存储
就是不知道性能上有否影响?
[解决办法]
另外 2005最大的是varchar(max)
可以存储2G
[解决办法]
【IT168技术文档】 本次测试的SQL SERVER 2000 的char 与 varchar。 测试分三组,每次增加插入的行数,脚本如下: CREATE TABLE [dbo].[testchar] ([a] [int] IDENTITY (1, 1) NOT NULL ,[b] [char] (200) COLLATE Chinese_PRC_CI_AS NULL) ON [PRIMARY]GOCREATE TABLE [dbo].[testvarchar] ([a] [int] IDENTITY (1, 1) NOT NULL ,[b] [varchar] (200) COLLATE Chinese_PRC_CI_AS NULL) ON [PRIMARY]GO--truncate table testvarchar--truncate table testchardeclare @i as intset @i=0while @i<50000begininsert into testvarchar values(cast(@i as varchar(200)))set @i=@i+1if @i=50000breakenddeclare @i as intset @i=0while @i<50000begininsert into testchar values(cast(@i as char(200)))set @i=@i+1if @i=50000breakend 实验结果:插入行数 数据类型 Cpu duration 50000 varchar 2359 21203 50000 char 2344 22250 100000 varchar 4156 44500 100000 char 4172 44186 2000000 varchar 8907 89093 2000000 char 9188 96530 两表存储空间比较 Testchar:73.94M Testvarchar:7.94M
[解决办法]
如果 varchar(300) 和 varchar(8000) 都存储相同的字符数,性能上是没有差别的,存储行为上也没有不同。因为它们都有相同的存储结构,两个字节的偏移,两个字节的列数(如果表中所有的列都是 varchar 类型)。区别只在于存储容量上。
大多数的性能比较都集中在 varchar 和 char,varchar 和 varchar(max) 上。还有,行外存储(SQL Server 2005 支持的)。
[解决办法]
SQLServer2005 中数据类型
varchar 长度最大可以到8000
--这是不对的,SQL2005varchar最大长度可到2G字节.
[解决办法]
设置为varchar(8000)的话容易产生不可利用的空闲磁盘块儿,这不太经济!大量不可利用的空闲磁盘块儿加剧数据的分散存储,在一定程度上影响了数据库各方面的性能!
[解决办法]
0)DECLARE @str varchar(MAX)SET @str = REPLICATE('*',8003)SELECT LEN(@str)1)--------------------8000(1 row(s) affected)
[解决办法]
通过行结构 可以看到无论你定义的VARCHAR()是多长
只要你插入的实际长度是一样的,那么它就存这么长。
所以没有性能差别
[解决办法]
长度除了存储的原因,更多是管理的需要。如身份证号码21位,如长度超出,数据即不能插入