至此,搞定!
为了验证上面我的说法,可以看一下Oracle中,qaz123在不同编码下的代码点
SQL> select 'UTF8',dump('qaz123') from dual
2 union all
3 select 'UTF16BE',dump(N'qaz123') from dual
4 union all
5 select 'UTF16LE', dump(convert('qaz123','AL16UTF16LE')) from dual
6 ;
'UTF8' DUMP('QAZ123')
------- ----------------------------------------------
UTF8 Typ=96 Len=6: 113,97,122,49,50,51
UTF16BE Typ=96 Len=12: 0,113,0,97,0,122,0,49,0,50,0,51
UTF16LE Typ=1 Len=12: 113,0,97,0,122,0,49,0,50,0,51,0
下面给出Oracle和SQL Server下的相关函数实现代码
Oracle:
创建MD5函数
CREATE OR REPLACE FUNCTION GET_MD5 ( p_str in varchar2) RETURN varchar2 IS BEGIN RETURN Utl_Raw.Cast_To_Raw(DBMS_OBFUSCATION_TOOLKIT.MD5(input_string => lower(P_Str))); END;
调用转换成Base64
select utl_raw.cast_to_varchar2(utl_encode.base64_encode(GET_MD5(convert('qaz123','AL16UTF16LE')))) from dual;
SQL Server:
从SQLServer 2005开始,其自带了hashbytes函数用于生成字符串的Hash,所以MD5这一步就可以直接采用现有的函数了。
至于转换成Base64,系统并没有提供相关函数,不过我们有变通的方法,原理是SQL Server使用FOR XML 生成xml 实例时,binary 数据使用base64 编码
函数如下:
create function f_ToBase64
(@bin varbinary(max))
returns varchar(max)
as begin
return cast(N'' as xml).value('xs:base64Binary(xs:hexBinary(sql:variable("@bin")))', 'varchar(max)')
end
最终调用:
select dbo.f_ToBase64(hashbytes('MD5',convert(NVARCHAR,'qaz123')))
特别需要注意红色部分,这是为了和C#代码逻辑保持一致。mssql2008 base64
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-53637-2.html
让我们知道你一直记得海浪的好
包括水域