如何编码语言特定字符,而在SQL Server 2012中转换VARBINARY()为varchar

2019-07-17 14:28发布

我想一个数据库列转换DATAvarbinary()varchar(max)在SQL Server 2012中。

我使用这个代码来处理的转换:

SELECT CONVERT(VARCHAR(MAX), DATA) FROM [dbo].[TABLE_NAME]

将得到的行如下:

VW 6501 Çamaşır

我有语言的特定字符的麻烦(语言是土耳其在我的情况现在)

如何克服在SQL Server 2012中这个编码的问题?

有没有一种通用的方法来做到这一点的转换为任何语言,在考虑任何特定语言的数据/编码问题的损失?

这听起来像一个菜鸟的问题,但我真的希望任何建议或回答。

谢谢,

Answer 1:

在一般情况下,SQL Server不持有很高的评价UTF-8。 然而,.NET有方法可以做到这一点,您可以通过CLR集成在他们那里得到。

这编译使用C#:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;

namespace UtfLib
{
    public static class UtfMethods
    {
        [SqlFunction(IsDeterministic = true, IsPrecise = true)]
        public static SqlBinary NVarCharToUtf8(SqlString inputText)
        {
            if (inputText.IsNull)
                return new SqlBinary(); // (null)

            return new SqlBinary(Encoding.UTF8.GetBytes(inputText.Value));
        }

        [SqlFunction(IsDeterministic = true, IsPrecise = true)]
        public static SqlString Utf8ToNVarChar(SqlBinary inputBytes)
        {
            if (inputBytes.IsNull)
                return new SqlString(); // (null)

            return new SqlString(Encoding.UTF8.GetString(inputBytes.Value));
        }
    }
}

导入组装成数据库,并创建外部函数:

CREATE ASSEMBLY UtfLib
FROM 'C:\UtfLib.dll'
GO
CREATE FUNCTION NVarCharToUtf8 (@InputText NVARCHAR(MAX))
RETURNS VARBINARY(MAX)
AS EXTERNAL NAME UtfLib.[UtfLib.UtfMethods].NVarCharToUtf8
GO
CREATE FUNCTION Utf8ToNVarChar (@InputBytes VARBINARY(MAX))
RETURNS NVARCHAR(MAX)
AS EXTERNAL NAME UtfLib.[UtfLib.UtfMethods].Utf8ToNVarChar

最后一步,您必须启用CLR

sp_configure 'clr enabled',1
GO
RECONFIGURE
GO
sp_configure 'clr enabled'  -- make sure it took
GO

瞧!

SELECT dbo.Utf8ToNVarChar(DATA) FROM [dbo].[TABLE_NAME]


Answer 2:

尝试NVARCHAR

Select convert (NVARCHAR(max),DATA) FROM  [dbo].[TABLE_NAME]

编辑:

SQL Server不支持UTF8的处理。 要转换二进制值,你写你自己的功能。 要做到这一点,最简单的方法是使用CLR。

您可以使用此作为模型: 如何在CLR UDF返回一个nvarchar(最大)?

刚刚与Encoding.UTF8.GetString替换正则表达式代码



文章来源: How to encode language specific chars while converting varbinary() to varchar(max) in SQL Server 2012?