我试图在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集成来实现它们.
但是,.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]