为什么从 varchar 转换为 varbinary 添加询问“?” SQL 服务器

Why converting from varchar to varbinary add an interrogation "?" SQL Server

我正在尝试将此字符串转换为 varbinary SQL 服务器:

select convert (varbinary(max),'<H2>Un titre</H2><INPUT value="some textre"> <INPUT id=param0 type=hidden value=1031> <INPUT id=exam0 type=hidden value=14711>')

它 returns 这个:

0x3C48323E556E2074697472653C2F48323E3C494E5055542076616C75653D22736F6D6520746578747265223E203C494E5055542069643D706172616D3020747970653D68696464656E2076616C75653D313033313E203C494E5055542069643D6578616D3020747970653D68696464656E2076616C75653D31343731313E

出于另一个原因,我想从 varbinary 转换为 varchar,我得到了这个结果:

?<H2>Un titre</H2><INPUT value="some textre"> <INPUT id=param0 type=hidden value=1031> <INPUT id=exam0 type=hidden value=14711>

我不想要“?”在结果中。

为什么SQL服务器记录在0x开头?我怎样才能避免这种情况?

改为这样做。然后它会给你想要的输出。

declare @b varbinary(max)
set @b = 0x3C48323E556E2074697472653C2F48323E3C494E5055542076616C75653D22736F6D6520746578747265223E203C494E5055542069643D706172616D3020747970653D68696464656E2076616C75653D313033313E203C494E5055542069643D6578616D3020747970653D68696464656E2076616C75653D31343731313E
select CAST(@b as varchar(max))

declare @b varbinary(max)
set @b = (select convert (varbinary(max),'<H2>Un titre</H2><INPUT value="some textre"> <INPUT id=param0 type=hidden value=1031> <INPUT id=exam0 type=hidden value=14711>'))
select CAST(@b as varchar(max))

结果

编辑

如果你想截掉0x那么你需要这样写:

declare @d varbinary(max)
declare @c varbinary(max)
set @c = (select convert (varbinary(max),'<H2>Un titre</H2><INPUT value="some textre"> <INPUT id=param0 type=hidden value=1031> <INPUT id=exam0 type=hidden value=14711>'))
select CONVERT(varchar(1000),@c,2)