我想一个数据库列转换DATA
从varbinary()
到varchar(max)
在SQL Server 2012中。
我使用这个代码来处理的转换:
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]
尝试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?