【发布时间】:2018-04-23 10:05:15
【问题描述】:
理论上 varchar(max) 和 varbinary(max) 列应该能够存储多达 2GB 的数据,但我无法存储 5000 个字符长的 unicode 字符串。
我查看了有关此主题的其他问题,他们都建议检查列大小。我已经这样做了,并看到所有相关列都声明为最大大小。
与类似问题的主要区别在于,在存储时我使用EncryptByKey 加密数据,我认为这是我正在寻找的瓶颈。从 MSDN 我知道 EncryptByKey 的返回类型的最大大小为 8000 字节,目前尚不清楚 @cleartext 参数的最大大小是多少,但我怀疑它是相同的。
以下代码给了我错误:
OPEN SYMMETRIC KEY SK1 DECRYPTION BY CERTIFICATE Cert1;
DECLARE @tmp5k AS NVARCHAR(max);
SET @tmp5k = N'...5000 characters...';
SELECT EncryptByKey(Key_GUID('SK1'), @tmp5k);
GO
[22001][8152] 字符串或二进制数据将被截断。
如何加密和存储大字符串(大约 5k unicode 字符)?
【问题讨论】:
-
问题是
ENCRYPTBYKEY的返回值;正如您所说,这是 8,000 字节。包含 5,000~ 个字符的nvarchar将是 10,000~ 个字节,因此您有 2,000~ 个字节的截断。 -
好的,有没有办法加密8000多字节?
-
我用谷歌搜索了一下,似乎答案是否定的,不是开箱即用的。一种方法是“切片和切块”您的数据;在您的情况下,将其分成 4,000 个(或更少)字符块并对其进行加密,然后将它们解密并将它们连接在一起。
标签: sql-server varcharmax encryptbykey