HASHBYTES,sql 中的 sha2_256 在从 python 调用时引入错误字符
HASHBYTES, sha2_256 in sql introduce bad characters when called from python
我们的旧 sql 遗留代码之一,使用 HASHBYTES 函数和 sha2_256.
转换 sql 中的数字列
整个过程正在转向 python,因为我们在遗留工作之上添加了一些高级用法。但是,当使用连接器时,我们调用相同的 sql 代码,即 HASHBYTES('sha2_256',column_name) id 返回带有大量垃圾的值。
运行 sql 中的代码导致此
Column Encoded_Column
101286297 0x7AC82B2779116F40A8CEA0D85BE4AA02AF7F813B5383BAC60D5E71B7BDB9F705
运行 来自 python 的相同 sql 查询结果为
Column Encoded_Column
101286297
b"z\xc8+'y\x11o@\xa8\xce\xa0\xd8[\xe4\xaa\x02\xaf\x7f\x81;S\x83\xba\xc6\r^q\xb7\xbd\xb9\xf7\x05"
密码是
Select Column,HASHBYTES('SHA2_256', CONVERT(VARBINARY(8),Column)) as Encoded_Column from table
我已经尝试过常规的垃圾清理但没有帮助
您得到了正确的结果,但显示为原始字节(这就是为什么您在 b"..."
中有 b 的原因)。
查看 SQL 的结果,您的数据使用 16 进制.
编码
因此,要转换 python 结果,您可以这样做:
x = b"z\xc8+'y\x11o@\xa8\xce\xa0\xd8[\xe4\xaa\x02\xaf\x7f\x81;S\x83\xba\xc6\r^q\xb7\xbd\xb9\xf7\x05"
x.hex().upper()
结果将是:
'7AC82B2779116F40A8CEA0D85BE4AA02AF7F813B5383BAC60D5E71B7BDB9F705'
这是你在 SQL 中得到的。
您可以阅读更多 here 关于 SQL 结果开头的 0x
python代码。
最后,如果您使用的是 pandas,您可以将整列转换为:
df["Encoded_Column"] = df["Encoded_Column"].apply(lambda x: x.hex().upper())
# And if you want the '0x' at the start do:
df["Encoded_Column"] = "0x" + df["Encoded_Column"]
我们的旧 sql 遗留代码之一,使用 HASHBYTES 函数和 sha2_256.
转换 sql 中的数字列整个过程正在转向 python,因为我们在遗留工作之上添加了一些高级用法。但是,当使用连接器时,我们调用相同的 sql 代码,即 HASHBYTES('sha2_256',column_name) id 返回带有大量垃圾的值。
运行 sql 中的代码导致此
Column Encoded_Column
101286297 0x7AC82B2779116F40A8CEA0D85BE4AA02AF7F813B5383BAC60D5E71B7BDB9F705
运行 来自 python 的相同 sql 查询结果为
Column Encoded_Column
101286297
b"z\xc8+'y\x11o@\xa8\xce\xa0\xd8[\xe4\xaa\x02\xaf\x7f\x81;S\x83\xba\xc6\r^q\xb7\xbd\xb9\xf7\x05"
密码是
Select Column,HASHBYTES('SHA2_256', CONVERT(VARBINARY(8),Column)) as Encoded_Column from table
我已经尝试过常规的垃圾清理但没有帮助
您得到了正确的结果,但显示为原始字节(这就是为什么您在 b"..."
中有 b 的原因)。
查看 SQL 的结果,您的数据使用 16 进制.
编码因此,要转换 python 结果,您可以这样做:
x = b"z\xc8+'y\x11o@\xa8\xce\xa0\xd8[\xe4\xaa\x02\xaf\x7f\x81;S\x83\xba\xc6\r^q\xb7\xbd\xb9\xf7\x05"
x.hex().upper()
结果将是:
'7AC82B2779116F40A8CEA0D85BE4AA02AF7F813B5383BAC60D5E71B7BDB9F705'
这是你在 SQL 中得到的。
您可以阅读更多 here 关于 SQL 结果开头的 0x
python代码。
最后,如果您使用的是 pandas,您可以将整列转换为:
df["Encoded_Column"] = df["Encoded_Column"].apply(lambda x: x.hex().upper())
# And if you want the '0x' at the start do:
df["Encoded_Column"] = "0x" + df["Encoded_Column"]