为什么我不能穿上为nvarchar(最大)的约束?(Why can't I put a co

2019-06-26 20:24发布

为什么我不能创建上的约束nvarchar(max)列? SQL Server将不会允许我把唯一约束就可以了。 但是,它让我创造上的唯一约束nvarchar(100)列。

这两列是NOT NULL 。 有什么理由我不能约束添加到nvarchar(max)列?

Answer 1:

nvarchar(max)是真正从一个不同的数据类型nvarchar(integer-length) 。 它的特点是更像是过时的text数据类型。

如果nvarchar(max)值过大,如text ,它会被存储排(行被限制为8000字节最大)和一个指向它存储该行本身英寸 你不能有效地指数这么大的字段和数据可存储在别处进一步复杂化搜索和扫描索引的事实。
unique约束要求强制执行的指标,因此,SQL Server的设计者决定禁止建立在其上的唯一约束。



Answer 2:

因为MAX是真正的大(2 31 -1个字节),并可能导致服务器崩溃如果服务器必须检查在多兆字节大小的条目唯一性。

从文档创建索引 ,我会承担这个拥有唯一约束也是如此。

组合索引值的最大可允许的大小是900个字节。

编辑 :如果你真的需要的独特性,你可以,可能通过计算数据的哈希和存储在一个唯一索引接近它。 即使是大的散列要足够小,适合在可转位列。 你必须弄清楚如何处理冲突 - 也许手动上碰撞和填充数据(改变哈希)检查是否一个错误的碰撞中找到。



Answer 3:

一个独特的约束实际上是一个指数,和nvarchar(最大)不能被用作索引的密钥。



文章来源: Why can't I put a constraint on nvarchar(max)?