sql >> データベース >  >> RDS >> Sqlserver

SQL Server 2012 で varbinary() を varchar(max) に変換するときに言語固有の文字をエンコードする方法は?

    一般に、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. MySQLによると:ドキュメント#1045-ユーザー'root' @'localhost'のアクセスが拒否されました(パスワードを使用:NO)

    2. OracleUpdateがハングする

    3. SQLServerで複数の行のテキストを単一のテキスト文字列に連結する方法

    4. データベースからのJTreeへの入力