2015-03-06 2 views
0

Я пытаюсь эту команду в SQL Server 2005, чтобы получить MD5 от '123':Почему TSQL преобразовывает результат функции в одну сторону и строку символов в другую сторону?

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 
+2

Попробуйте следующее: 'select convert (varbinary (16), N'202cb962ac59075b964b07152d234b70 ')' ... обратите внимание на 'N' перед строкой, чтобы сделать следующую строку Unicode – LittleBobbyTables

ответ

2

"Обычный тип символов" против Unicode

Это выполняет преобразование из NVARCHAR (Unicode) в Varbinary

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

По умолчанию, помещая текст в одинарных кавычках используется регулярным такие как Char или Varchar. Это выполняет преобразование из Varchar ("Regular Тип данных") для VARBINARY

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

Попробуйте это:

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

"N" перед котировка определяет значение, как NVARCHAR (Unicode), и вы получите желаемое значение

0x32003000320063006200390036003200 

Hop Это помогает!

Смежные вопросы