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

How to encode language specific chars while converting varbinary() to varchar(max) in SQL Server 2012?(如何在 SQL Server 2012 中将 varbinary() 转换为 varchar(max) 时对特定于语言的字符进行编码?)
本文介绍了如何在 SQL Server 2012 中将 varbinary() 转换为 varchar(max) 时对特定于语言的字符进行编码?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试将 SQL Server 2012 中的数据库列 DATAvarbinary() 转换为 varchar(max).

I am trying to convert a database column DATA from varbinary() to varchar(max) in SQL Server 2012.

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

I am using this code to handle the conversion:

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

结果行如下:

VW 6501 Çamaşır

我在使用语言特定字符时遇到问题(目前我的语言是土耳其语)

I am having trouble with language specific characters (language is Turkish in my case for now)

如何解决 SQL Server 2012 中的这个编码问题?

How do I get over this encoding problem in SQL Server 2012?

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

Is there a generic way to do this conversion for any language, considering loss of data/encoding problems for any given language?

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

This may sound like a rookie question but I really would appreciate any suggestions or answer.

谢谢,

推荐答案

一般来说,SQL Server 并不重视 UTF-8.但是,.NET 有方法可以做到这一点,您可以通过 CLR 集成获得它们.

In general, SQL Server does not hold UTF-8 in high regard. However, .NET has methods to do this and you can get at them via CLR integration.

使用 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));
        }
    }
}

将程序集导入数据库并创建外部函数:

Import the assembly into your database and create the external functions:

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

Last step, you have to enable 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]

这篇关于如何在 SQL Server 2012 中将 varbinary() 转换为 varchar(max) 时对特定于语言的字符进行编码?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Execute complex raw SQL query in EF6(在EF6中执行复杂的原始SQL查询)
SSIS: Model design issue causing duplications - can two fact tables be connected?(SSIS:模型设计问题导致重复-两个事实表可以连接吗?)
SQL Server Graph Database - shortest path using multiple edge types(SQL Server图形数据库-使用多种边类型的最短路径)
Invalid column name when using EF Core filtered includes(使用EF核心过滤包括时无效的列名)
How should make faster SQL Server filtering procedure with many parameters(如何让多参数的SQL Server过滤程序更快)
How can I generate an entity–relationship (ER) diagram of a database using Microsoft SQL Server Management Studio?(如何使用Microsoft SQL Server Management Studio生成数据库的实体关系(ER)图?)