【发布时间】:2013-11-26 14:20:30
【问题描述】:
我在 SQL Server 2008 上有这个查询
CREATE TABLE MediaLibrary
(
MediaId bigint NOT NULL IDENTITY (1, 1),
MediaTypeId smallint NOT NULL,
ImageNameByUser nchar(100) NULL,
GeneratedName uniqueidentifier NOT NULL,
UploadedByUserId uniqueidentifier NOT NULL,
UploadedDate date NOT NULL,
ProfilePhoto bit NOT NULL,
PublicPhoto bit NOT NULL,
AppointmentId bigint NULL,
OriginalImage nchar(1000) NULL,
ThumbImage nchar(1000) NULL,
MediumImage nchar(1000) NULL,
LargeImage nchar(1000) NULL,
UrlThumb nchar(1000) NULL,
UrlMedium nchar(1000) NULL,
UrlLarge nchar(1000) NULL,
InactiveReasonId smallint NULL,
InactiveDate datetime NULL
) ON [PRIMARY]
GO
当我尝试创建表时出现此错误
创建或更改表“MediaLibrary”失败,因为最小行大小为 14273,包括 9 字节的内部开销。这超出了允许的最大表行大小 8060 字节。
我知道我达到了行大小的限制,但这不是一张大桌子,所以我想知道这不是一个好的设计吗?
当我将nchar(1000) 更改为varChar(1000) 时,表格保存得很好。我担心的是,一旦数据实际保存到表中,我将再次达到行大小限制。
【问题讨论】:
-
nchar(1000)是一个非常糟糕的主意 - 它会总是使用 2000 字节的存储空间 - 即使你只在里面存储“a”它。nchar(n)是简短的(最多 3 个,可能是 5 个字符)字符串,例如ISO货币代码等;但对于较长的文本 sn-ps,您应该始终使用(n)varchar(x)数据类型,它只存储真正存在的内容!
标签: sql-server database-design sql-server-2008-r2