在 SQL Server 中对超过 8000 字节进行哈希处理
SQL Server 的哈希函数 HASHBYTES
的输入限制为 8000 字节。
如何散列较大的字符串?
SQL Server's hashing function HASHBYTES
has an input limit of 8000 bytes.
How do you hash larger strings?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可以编写一个 SQL CLR 函数:
然后可以像这样在 SQL 中调用它:
仅当长度超过 8k 时才需要 BigHashBytes。
You could write a SQL CLR function:
And then it can be called in SQL like this:
The
BigHashBytes
is only necessary if the length would be over 8k.您可以对输入的 8k(或 4k 或 2k)块进行哈希处理,然后连接这些哈希值或将它们哈希为新的哈希值。不过,如果您必须创建类似的算法(例如在外部 .NET 应用程序中)来比较在 SQL Server 外部创建的哈希值,这可能会变得很困难。
另一种选择:依靠 SQL Server 的 CLR 集成 并在 .NET 中执行哈希集会。
You could hash 8k (or 4k or 2k) chunks of the input and then either concatenate those hashes or hash them into a new hash value. This might get difficult though if you have to create a similar algorithm (in an external .NET app for example) to compare hashes created outside of SQL Server.
Another option: Lean on SQL Server's CLR integration and perform the hashing in a .NET assembly.
与 Paul 的想法一样,对于分块,想到的一个想法是将散列字符串存储在 XML 列中,每个块作为单独的 XML 元素。
Like Paul's idea, one idea that comes to mind for chunking would be to store the hashed string in an XML column, with each chunk as a separate XML element.