Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да кодирам специфични за език символи, докато конвертирам varbinary() във varchar(max) в 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]


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да прекъсна вмъкване на множество редове в тригер

  2. Отложена издръжливост в SQL Server 2014

  3. Изпълнение на SQL DELETE

  4. Регистрирайте ново име на сървър в Sql Managment Studio

  5. Динамичен каталог на свързан сървър за изпълнение на MDX чрез OpenQuery