【问题标题】:Why TSQL convert a function's result in one way and a character string to other way?为什么 TSQL 以一种方式将函数的结果转换为另一种方式的字符串?
【发布时间】:2015-05-08 09:11:37
【问题描述】:

我在 SQL Server 2005 中尝试使用此命令从“123”获取 MD5:

select SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5',  '123' )), 3, 32) 

我得到了这个结果:

202cb962ac59075b964b07152d234b70

我要转成二进制格式,

select 
   convert(varbinary(16), SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5',  '123')), 3, 32)) 

我得到了这个结果:

0x32003000320063006200390036003200

为什么会有这段代码:

select convert(varbinary(16), '202cb962ac59075b964b07152d234b70')

导致不同的值?

0x32303263623936326163353930373562

【问题讨论】:

  • 试试这个:select convert(varbinary(16), N'202cb962ac59075b964b07152d234b70')...注意字符串前的N,使后面的字符串变成Unicode

标签: sql tsql sql-server-2005 binary md5


【解决方案1】:

“常规字符类型”与 Unicode

这执行从 Nvarchar(Unicode) 到 Varbinary

的转换
select convert(varbinary(16),SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5',  '123' )),3,32))

默认情况下,将文本放在单引号中使用常规字符类型,例如 Char 或 Varchar。这将执行从 Varchar(“常规数据类型”)到 Varbinary

的转换
select convert(varbinary(16),'202cb962ac59075b964b07152d234b70')

试试这个:

SELECT CONVERT(varbinary(16), N'202cb962ac59075b964b07152d234b70')

引号前的“N”将值定义为 Nvarchar(Unicode),您将获得所需的值

0x32003000320063006200390036003200

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-22
    • 2013-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多