- 您只能使用nvarchar(4000)或nvarchar(max),中间没有其他选项。
- 索引键列的总长度不能超过900字节,因此您也无法对nvarchar(4000)(即8000字节)进行索引。
就我个人而言,我不明白为什么需要对nvarchar(max)进行索引。
您真的会搜索长度达1GB的字符串吗?
无论如何,您唯一的选择是在持久化计算列中使用HASHBYTES。
您可以创建一个列的哈希值,并对哈希值进行索引。
请注意,根据版本,您可能无法对nvarchar(max)进行哈希处理。
对于SQL Server 2014及以下版本,允许输入值的最大长度为8000字节。
以下是SQL Server 2016代码示例,还可强制执行唯一性。
SHA2_512哈希具有碰撞最少的几率。对于足够大的表格,像MD4这样较弱的哈希函数将会遇到生日问题。
CREATE TABLE dbo.HashExample (
SomeID int NOT NULL IDENTITY(1, 1) PRIMARY KEY,
SomeLongText nvarchar(MAX) NULL,
SomeHash AS HASHBYTES('SHA2_512', SomeLongText) PERSISTED
)
GO
CREATE UNIQUE INDEX UX_SomeHash ON dbo.HashExample(SomeHash) WHERE SomeLongText IS NULL
GO
INSERT dbo.HashExample (SomeLongText) VALUES ('Row 1'), ('Row 2')
GO
SELECT * FROM dbo.HashExample
GO
DECLARE @LookFor nvarchar(MAX) = 'Row 3'
SELECT * FROM dbo.HashExample WHERE SomeHash = HASHBYTES('SHA2_512', @LookFor)
SET @LookFor = 'Row 2'
SELECT * FROM dbo.HashExample WHERE SomeHash = HASHBYTES('SHA2_512', @LookFor)
GO
请注意,您不能进行LIKE搜索。只能使用=
或<>
。