You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Snowflake中获取与SQL Server nvarchar一致的SHA2_256哈希值?

在Snowflake中获取SQL Server nvarchar类型的SHA2_256哈希值

核心差异原因

SQL Server执行HASHBYTES('SHA2_256', @nvarchar_str)时,是基于字符串的UTF-16LE编码字节序列计算哈希;而Snowflake默认VARCHAR采用UTF-8编码,直接调用SHA2(utf8_str, 256)会基于UTF-8字节运算,因此结果不一致。

实现方法

要在Snowflake中得到与SQL Server nvarchar完全一致的哈希值,需要模拟SQL Server的编码处理逻辑,步骤如下:

  1. 将字符串转换为UTF-16LE编码的二进制数据
  2. 对二进制数据计算SHA2_256哈希
  3. 将哈希结果转为大写十六进制字符串(匹配SQL Server默认输出格式)

通用代码示例

假设你要哈希的原字符串为SQL Server中的N'your_target_string',在Snowflake中执行以下语句:

SELECT 
    UPPER(HEX_ENCODE(SHA2(TO_BINARY('your_target_string', 'UTF16LE'), 256))) AS sql_server_nvarchar_sha256;

验证目标哈希值

如果目标哈希E79E418E48623569D75E2A7B09AE88ED9B77B126A445B9FF9DC6989A08EFA079对应某一特定原字符串,只需将原字符串替换到上述语句中,即可生成该哈希值。

关键函数说明

  • TO_BINARY(str, 'UTF16LE'):将Snowflake的UTF-8字符串转换为UTF-16LE编码的二进制数据,对应SQL Server nvarchar的编码规则
  • SHA2(binary_data, 256):对二进制数据计算SHA2_256哈希
  • HEX_ENCODE():将二进制哈希结果转换为十六进制字符串
  • UPPER():将结果转为大写,匹配SQL Server哈希输出的格式

内容的提问来源于stack exchange,提问作者Dmytro Sly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 15:42:04