如何选择ntext列为二进制/十六进制

时间:2011-03-28 21:06:20

标签: sql tsql unicode

我正在尝试调试应用层中的unicode问题。为此,我希望能够以二进制格式(UTF-8或十六进制的UTF-16)快速查看MS SQL列(ntext)的内容,以便我可以识别所涉及的精确unicode字符。

为此,我想写一个查询效果:

SELECT CONVERT_TO_UTF16_HEX( [mytext] ) FROM [mytable] WHERE [id] = 123;

我该怎么做呢?

(编辑:将首选项更改为UTF16)。

2 个答案:

答案 0 :(得分:3)

转换两次,首先转换为NVARCHAR(MAX),然后转换为VARBINARY(MAX)

样品

declare @mytable table (id int, mytext ntext)
insert @mytable select 123, 'someUNICODEütext'

SELECT convert(varbinary(max),convert(nvarchar(max),[mytext]))
FROM @mytable
WHERE [id] = 123;

答案 1 :(得分:1)

不完全是你所要求的,但它可能会有所帮助。如果将ntext值获得nvarchar(max)值,则可以使用递归cte分割字符,然后使用unicode获取每个字符的unicode值。

declare @txt as nvarchar(max)
set @txt = 'abcåäö€'

;with cte as 
(
  select
    left(@txt, 1) as c,
    stuff(@txt, 1, 1, '') as rest
  union all
  select
    left(rest, 1) as c,
    stuff(rest, 1, 1, '') as rest
  from cte
  where len(rest) > 0
)
select c, unicode(c)
from cte
option (maxrecursion 0)

结果

---- -----------
a    97
b    98
c    99
å    229
ä    228
ö    246
€    8364