Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Bagaimana cara menyandikan karakter khusus bahasa saat mengonversi varbinary() ke varchar(max) di SQL Server 2012?

Secara umum, SQL Server tidak menjunjung tinggi UTF-8. Namun, .NET memiliki metode untuk melakukan ini dan Anda bisa mendapatkannya melalui integrasi CLR.

Kompilasi ini menggunakan 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));
        }
    }
}

Impor rakitan ke database Anda dan buat fungsi eksternal:

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

Langkah terakhir, Anda harus mengaktifkan clr

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

dan 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. Memilih N baris di SQL Server

  2. SQL Server:SUM() dari beberapa baris termasuk klausa where

  3. CTE untuk mendapatkan semua anak (keturunan) dari orang tua

  4. Ekstrak nama belakang, nama depan, dan akhiran ke dalam kolom terpisah

  5. Bagaimana cara memuat gambar dari SQL Server ke dalam kotak gambar?