Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Làm cách nào để mã hóa các ký tự ngôn ngữ cụ thể trong khi chuyển đổi varbinary () thành varchar (max) trong SQL Server 2012?

Nói chung, SQL Server không coi trọng UTF-8, tuy nhiên, .NET có các phương pháp để thực hiện việc này và bạn có thể sử dụng chúng thông qua tích hợp CLR.

Biên dịch điều này bằng 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));
        }
    }
}

Nhập tập hợp vào cơ sở dữ liệu của bạn và tạo các chức năng bên ngoài:

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

Bước cuối cùng, bạn phải bật clr

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

và voilà!

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. Không tạo được cho cơ sở dữ liệu, SMO, C #

  2. SQL:Tại sao các giá trị NULL được lọc ra trong mệnh đề where này?

  3. Cách nhập tệp JSON vào bảng SQL Server

  4. Xóa cấu hình thư cơ sở dữ liệu trong SQL Server (T-SQL)

  5. Chèn GUID với SqlBulkCopy