我们目前正在考虑将字符串列设置为nvarchar(max)
,而不是指定特定的长度以防止数据库中没有足够空间存储字符串的问题。林只是想知道这是一件好事,或者它可以导致任何问题,因为它可以做,那么为什么指定一个长度,如nvarchar(10)
,而不是nvarchar(max)
。我们也使用varbinary(max)
很多,因为我们不知道我们需要多少二进制数据,所以我不知道这是一个效果多少,或者让我们的插入速度没有我认为应该的那么快。这是一个示例表:SqlServer和nvarchar(最大)
CREATE TABLE [dbo].[SAMPLETABLE] (
[ID] [uniqueidentifier] NOT NULL,
[FIELD1] [int] NOT NULL,
[FIELD2] [nvarchar] (2000) NULL,
[FIELD3] [nvarchar] (max) NULL,
[FIELD4] [uniqueidentifier] NULL,
[FIELD5] [int] NULL,
[FIELD6] [nvarchar] (2000) NULL,
[FIELD7] [varbinary] (max) NULL,
[FIELD8] [varbinary] (max) NULL,
[FIELD9] [varbinary] (max) NULL,
[FIELD10] [uniqueidentifier] NULL,
[FIELD11] [nvarchar] (2000) NULL,
[FIELD12] [varbinary] (max) NULL,
[FIELD13] [varbinary] (max) NULL,
[FIELD14] [bit] NULL,
[FIELD15] [uniqueidentifier] NULL,
[FIELD16] [varbinary] (max) NULL,
[FIELD17] [bit] NULL,
[FIELD18] [tinyint] NULL,
[FIELD19] [datetime] NULL,
[FIELD20] [nvarchar] (2000) NULL,
PRIMARY KEY CLUSTERED
(
[ID] ASC
)
) ON [PRIMARY]
GO
给定一个表的设计一样,并改变nvarchar(2000)
到nvarchar(max)
将让事情更糟(或更好)? sqlserver是否对这样的设计皱眉头?
你存储什么样的数据?唯一的*问题*将是索引,搜索和约束。尽管如此,这并不是一个好主意。 – Matthew 2011-02-02 17:57:16
**请不要这样做!**如果我在一个拥有这样的桌子的地方被雇用,我会跑出大门!然后,在所有nvarchar(max)列yuck顶部添加聚簇uniqueidentifier PK。你正在杀死你索引数据的能力。不久的将来,你会回过头来问一个关于你的查询运行速度如此缓慢的问题,并且不会有太多的事情可以加快速度。当天,所有主流/流行语言都是强类型的,但现在还没有那么多。如果你尝试在数据库中使用“那个”拐杖,你会遇到问题。 – 2011-02-02 19:40:21
@KM如果可以的话,我会百万次提出你的评论,这是可怕的数据库设计。 – HLGEM 2011-02-02 20:24:09