我有一个Unicode字符串,我想使用Python和T-SQL两种不同的工具对其进行哈希: 我尝试了以下功能:
CREATE FUNCTION dbo.[FUNC_HASH] (@INPUT VARCHAR(100)) RETURNS VARCHAR(36)
AS
BEGIN
DECLARE @RESULT VARCHAR(36);
SET @RESULT = CONVERT(VARCHAR(100),HASHBYTES('MD5',@INPUT),1);
RETURN SUBSTRING(@RESULT,3,34)
END
GO
SELECT dbo.[FUNC_HASH]('HĐTID123')
ALTER FUNCTION dbo.[FUNC_HASH] (@INPUT NVARCHAR(100)) RETURNS NVARCHAR(36)
AS
BEGIN
DECLARE @RESULT NVARCHAR(36);
SET @RESULT = CONVERT(NVARCHAR(100),HASHBYTES('MD5',@INPUT),1);
RETURN SUBSTRING(@RESULT,3,34)
END
GO
SELECT dbo.[FUNC_HASH](N'HĐTID123')
import hashlib
def hash_coverter(source_str):
result = str(hashlib.md5(str(source_str).encode('utf-8')).hexdigest()).upper()
return result
hash_coverter("HĐTID123")
使用非Unicode字符串进行测试时,例如,“TID123” 它们都返回相同的答案:“2BDD0FE0AEA9FBC5C27A75085FB14388” 但当我插入一个Unicode字符串时,例如,“HĐTID123”,它们将返回一组不同的结果
SQL(VARCHAR):'FE0E48AA12DF0075C8E2846796B44F10'
SQL(NVARCHAR):'C2A503D87D5EEF7340EDF6EC51DD2C47'
Python:'CE88EADF61D061E8929363169DB60EF8'
有没有办法重写这两个函数以获得相同的结果
我当前的数据库排序规则是SQL\u Latin1\u General\u CP1\u CS\u AS。在T-SQL函数中使用NVARCHAR对我没有任何帮助
UTF-8似乎是问题所在。SQL Server 2019支持UTF-8排序规则:
返回
0xCE88EADF61D061E8929363169DB60EF8
应该有一种方法,它不需要创建一个表来强制排序,但是已经过了我的就寝时间,所以我将把它作为练习留给读者
DBfiddle示例
相关问题 更多 >
编程相关推荐