Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak zakodować znaki specyficzne dla języka podczas konwertowania varbinary() na varchar(max) w SQL Server 2012?

Ogólnie rzecz biorąc, SQL Server nie ma dużego szacunku dla UTF-8. Jednak .NET ma metody, aby to zrobić i można je uzyskać poprzez integrację CLR.

Skompiluj to za pomocą 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));
        }
    }
}

Zaimportuj zespół do swojej bazy danych i utwórz funkcje zewnętrzne:

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

Ostatni krok, musisz włączyć clr

sp_configure 'clr enabled',1
GO
RECONFIGURE
GO
sp_configure 'clr enabled'  -- make sure it took
GO

i voila!

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. SQL Server 2012:Wybierz Top n na podstawie wielu kryteriów

  2. Czy możesz monitorować wykonywanie pakietu SSIS w BIDS, gdy działa on na serwerze?

  3. Log4net zapisuje niestandardowy obiekt do bazy danych sql za pomocą niestandardowego appendera?

  4. Zapytanie SQL Server, które identyfikuje brakujące dane dla określonych dat

  5. Błąd podczas ustawiania wartości domyślnej newsectionid() w serwerze sql 2008