小编Joh*_*irs的帖子

将 UTF-8 varbinary(max) 转换为 varchar(max)

我有一个 varbinary(max) 列,其中包含已压缩的 UTF-8 编码文本。我想解压缩这些数据并在 T-SQL 中使用 SQL Server 的 UTF-8 功能将其作为 varchar(max) 处理。

我正在寻找一种在从 varbinary(max) 转换为 varchar(max) 时指定编码的方法。我设法做到这一点的唯一方法是创建一个表变量,其中包含一个带有 UTF-8 排序规则的列,并将 varbinary 数据插入其中。

DECLARE @rv TABLE(
    Res varchar(max) COLLATE Latin1_General_100_CI_AS_SC_UTF8 
)

INSERT INTO @rv
SELECT SUBSTRING(Decompressed, 4, DATALENGTH(Decompressed) - 3) WithoutBOM
FROM
    (SELECT DECOMPRESS(RawResource) AS Decompressed FROM Resource) t
Run Code Online (Sandbox Code Playgroud)

我想知道是否有不涉及插入表变量的更优雅和有效的方法。

更新:

将其归结为一个不处理字节顺序标记或压缩的简单示例:

我有字符串“Hello”UTF-8编码,没有存储在变量中的BOM @utf8Binary

DECLARE @utf8Binary varbinary(max) = 0x48656C6C6F20F09F988A
Run Code Online (Sandbox Code Playgroud)

现在我尝试将其分配给各种基于字符的变量并打印结果:

DECLARE @brokenVarChar varchar(max) = CONVERT(varchar(max), @utf8Binary)
print '@brokenVarChar = ' + @brokenVarChar

DECLARE @brokenNVarChar nvarchar(max) = CONVERT(varchar(max), @utf8Binary)
print '@brokenNVarChar …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server

11
推荐指数
2
解决办法
1017
查看次数

标签 统计

sql-server ×1

t-sql ×1