加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – 如何在SQL Server 2012中将varbinary()转换为varc

发布时间:2020-12-12 16:18:43 所属栏目:MsSql教程 来源:网络整理
导读:我试图在SQL Server 2012中将数据库列DATA从varbinary()转换为varchar(max). 我正在使用此代码来处理转换: SELECT CONVERT(VARCHAR(MAX),DATA) FROM [dbo].[TABLE_NAME] 结果行如下: VW 6501 ??ama???±r 我在语言特定字符方面遇到麻烦(目前我的语言是土耳
我试图在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]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读