sql-server – 如何在SQL Server 2012中将varbinary()转换为varchar(max)时对特定于语言的字符进行编码?

前端之家收集整理的这篇文章主要介绍了sql-server – 如何在SQL Server 2012中将varbinary()转换为varchar(max)时对特定于语言的字符进行编码?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图在sql Server 2012中将数据库列DATA从varbinary()转换为varchar(max).

我正在使用此代码来处理转换:

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

结果行如下:

VW 6501 Çamaşır

我在语言特定字符方面遇到麻烦(目前我的语言是土耳其语)

如何在sql Server 2012中克服此编码问题?

考虑到任何给定语言的数据/编码问题丢失,是否有通用方法对任何语言进行此转换?

这可能听起来像一个菜鸟问题,但我真的很感激任何建议或答案.

谢谢,

解决方法

通常,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]

猜你在找的MsSQL相关文章