代码之家  ›  专栏  ›  技术社区  ›  Stefan Schönbächler

将UTF-8编码的varbinary(max)数据转换为nvarchar(max)字符串

  •  1
  • Stefan Schönbächler  · 技术社区  · 7 年前

    有没有一种简单的方法可以在T-SQL中将UTF-8编码的varbinary(max)列转换为varchar(max)。类似的东西 CONVERT(varchar(max), [MyDataColumn]) . 最好是不需要自定义函数的解决方案。 目前,我在客户机端转换数据,但这有一个缺点,即正确的过滤和排序不如服务器端有效。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Gottfried Lesigang    7 年前

    SQL Server不知道UTF-8(至少可以使用productivly的所有版本)。有 limited support starting with v2014 SP2 (以及 supported versions ) 阅读时 utf-8 编码文件从光盘通过 BCP (同样适用于将内容写入光盘)。

    重要的是要知道:

    VARCHAR(x) 是 不 UTF-8 . 它是 1-字节编码 扩展的ASCII,使用代码页(活在排序规则中)作为字符映射。

    NVARCHAR(x) 是 不 utf-16 (但离它很近, ucs-2 ) . 这是一个 2-字节编码 包含几乎所有已知字符的字符串(但存在例外)。

    UTF-8 将使用1字节 普通拉丁语 字符,但2个或更多字节到编码的外部字符集。

    一 VARBINARY(x) 将举行 UTF-8 作为一个毫无意义的字节链。

    简单的 CAST 或 CONVERT 不会工作: VARCHAR 将每个字节作为一个字符。当然,这不是你所期望的结果。 NVARCHAR 将2个字节的每个块作为一个字符。又不是你需要的东西。

    你可以试着把这个写进一个文件,然后用 BCP (V2014 SP2或更高版本)。但我看到你最好的机会是 CLR function .