知道為什么 SQL Server 和 Oracle 中的兩個散列函式在散列不間斷空格字符時會產生不同的結果嗎?
Oracleselect standard_hash('a ', 'MD5') from dual;結果25EF28EB5A5BE667C6222418E9E27E8E與 SQLselect HASHBYTES ('MD5','a ');結果不匹配CE8F03020C81133B3A082F8051EB9FF6。注意輸入 'a' 后面的空格是一個不間斷的空格字符。
有什么好的來源可以說明差異嗎?
uj5u.com熱心網友回復:
這似乎是一個字符集或“歸類”的問題,其中Oracle是UTF-8和SQL Server是在拉丁美洲1252我的解決辦法計算散列之前轉換的值到Windows拉丁-1252在甲骨文:select STANDARD_HASH(CONVERT('a ','WE8MSWIN1252'), 'MD5') from dual。
為了找到我SELECT collation_name FROM sys.databases WHERE name = 'MY_DB_NAME';在 SQL Server 和select * from nls_database_parameters where parameter='NLS_CHARACTERSET';Oracle 中所做的排序規則/字符集。
uj5u.com熱心網友回復:
首先,您需要確定哪個實際上產生了“不同”的結果:
使用您最喜歡的搜索引擎查找在線哈希生成器和測驗結果。
外部資源
https://passwordsgenerator.net/md5-hash-generator/ - 99020CB24BD13238D907C65CC2B57C03
https://www.md5hashgenerator.com/ - 99020cb24bd13238d907c65cc2b57c03
https://www.miraclesalad.com/webtools/md5.php - 99020cb24bd13238d907c65cc2b57c03
資料庫服務器
select HASHBYTES ('MD5', 'a ')
SQL Server 2014 SP3 (12.0.6024.0) - 0x99020CB24BD13238D907C65CC2B57C03
SQL Server 2019 (15.0.2080.9) - 0x99020CB24BD13238D907C65CC2B57C03
甲骨文(使用https://dbfiddle.uk/)
select standard_hash('a ', 'MD5') from dual;
甲骨文 21c - 0x99020CB24BD13238D907C65CC2B57C03
甲骨文 18c - 0x99020CB24BD13238D907C65CC2B57C03
Oracle 11gR2 - "ORA-00904: "STANDARD_HASH": 無效識別符號"
結論
您可以看到您的 Oracle 生成的答案甚至與其他 Oracle 答案不同。您運行的是哪個版本的 Oracle?設定了哪些其他選項,例如整理等?
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/392591.html
標籤:sql-server 甲骨文 散列
上一篇:甲骨文下個季度的第一天
