为什么 TSQL 将函数的结果以一种方式转换,而将字符串转换为另一种方式?
Why TSQL convert a function's result in one way and a character string to other way?
我在 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
"Regular Character Type" 与 Unicode
这执行从 Nvarchar(Unicode) 到 Varbinary
的转换
select convert(varbinary(16),SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5', '123' )),3,32))
默认情况下,将文本放在单引号中使用常规字符类型,如 Char 或 Varchar。这执行从 Varchar("Regular Data Type") 到 Varbinary
的转换
select convert(varbinary(16),'202cb962ac59075b964b07152d234b70')
试试这个:
SELECT CONVERT(varbinary(16), N'202cb962ac59075b964b07152d234b70')
引号前的 "N" 将值定义为 Nvarchar(Unicode),您将获得所需的值
0x32003000320063006200390036003200
希望对您有所帮助!
我在 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
"Regular Character Type" 与 Unicode
这执行从 Nvarchar(Unicode) 到 Varbinary
的转换select convert(varbinary(16),SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5', '123' )),3,32))
默认情况下,将文本放在单引号中使用常规字符类型,如 Char 或 Varchar。这执行从 Varchar("Regular Data Type") 到 Varbinary
的转换select convert(varbinary(16),'202cb962ac59075b964b07152d234b70')
试试这个:
SELECT CONVERT(varbinary(16), N'202cb962ac59075b964b07152d234b70')
引号前的 "N" 将值定义为 Nvarchar(Unicode),您将获得所需的值
0x32003000320063006200390036003200
希望对您有所帮助!