【问题标题】:How to decode nvarchar to text (SQL Server 2008 R2)?如何将 nvarchar 解码为文本(SQL Server 2008 R2)?
【发布时间】:2011-06-07 09:51:25
【问题描述】:

我有一个带有 nvarchar(4000) 字段的 SQL Server 2008 R2 表。

存储此表的数据如下所示

'696D616765206D61726B65643A5472'

或

'303131' ("011")。

我看到每个字符都编码为十六进制。

如何从表中读取这些数据?我不想写解码功能,我的意思是存在更简单的方法。

附:对不起我的英语。

【问题讨论】:

    标签: sql-server sql-server-2008 encoding decoding nvarchar


    【解决方案1】:

    SQL Server 2008 实际上有一个内置的十六进制编码和解码功能!

    示例(将字符串转换为 VarBinary 时,注意第三个参数的值为“1”):

    DECLARE @ProblemString VarChar(4000) = '54657374'
    SELECT Convert(VarChar, Convert(VarBinary, '0x' + @ProblemString, 1))
    

    参考:http://blogs.msdn.com/b/sqltips/archive/2008/07/02/converting-from-hex-string-to-varbinary-and-vice-versa.aspx

    这种方法的优点是您不需要“Exec”调用,您通常会尽量避免这种调用,因为害怕注入等等。缺点是只能在 SQL Server 2008 及更高版本中运行。

    【讨论】:

      【解决方案2】:

      你需要一个我认为最简单的解码函数:

      declare @fld nvarchar(4000) = '696D616765206D61726B65643A5472'
      
      exec('SELECT CONVERT(varchar(max),0x' + @fld + ')')
      
      ---------------
      image marked:Tr
      

      【讨论】:

      • declare @fld nvarchar(4000) set @fld = '696D616765206D61726B65643A5472' exec('SELECT CONVERT(varchar(max),0x' + @fld + ')') 我认为这会更精确
      • 是的,尽管 sql 2k8 支持 declare @v type = value 的价值
      猜你喜欢
      • 2011-04-20
      • 2016-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多