微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐