ホームページ > データベース > mysql チュートリアル > SQL Server で UTF-8 テキストを ISO 8859-1 に変換するにはどうすればよいですか?

SQL Server で UTF-8 テキストを ISO 8859-1 に変換するにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-03 13:37:39
オリジナル
945 人が閲覧しました

How to Convert UTF-8 Text to ISO 8859-1 in SQL Server?

SQL Server でテキスト値を UTF-8 から ISO 8859-1 に変換する

問題: SQL Server の列は UTF-8 エンコードを使用しており、テキストを ISO 8859-1 に変換して保存する必要があります。 encoding.

解決策: この変換を実現するには、カスタム関数を利用できます。次のコードは実装を提供します:

CREATE FUNCTION dbo.DecodeUTF8String (@value varchar(max))
RETURNS nvarchar(max)
AS
BEGIN
    -- Check if the string is ASCII or null, as no conversion is needed.
    IF (@value IS NULL
        OR @value NOT LIKE '%[^ -~]%' COLLATE Latin1_General_BIN
    )
        RETURN @value;

    DECLARE @result nvarchar(max);

    -- Split the UTF-8 string into octets and calculate their codepoints.
    WITH octets AS
    (
        SELECT position, highorderones, partialcodepoint
        FROM numbers a
        CROSS APPLY (SELECT octet = ASCII(SUBSTRING(@value, position, 1))) b
        CROSS APPLY (SELECT highorderones = 8 - FLOOR(LOG( ~CONVERT(tinyint, octet) * 2 + 1)/LOG(2))) c
        CROSS APPLY (SELECT databits = 7 - highorderones) d
        CROSS APPLY (SELECT partialcodepoint = octet % POWER(2, databits)) e
    ),
    codepoints AS
    (
        SELECT position, codepoint
        FROM
        (
            SELECT position, highorderones, partialcodepoint
            FROM octets
            WHERE highorderones <> 1
        ) lead
        CROSS APPLY (SELECT sequencelength = CASE WHEN highorderones in (1,2,3,4) THEN highorderones ELSE 1 END) b
        CROSS APPLY (SELECT endposition = position + sequencelength - 1) c
        CROSS APPLY
        (
            SELECT codepoint = SUM(POWER(2, shiftleft) * partialcodepoint)
            FROM octets
            CROSS APPLY (SELECT shiftleft = 6 * (endposition - position)) b
            WHERE position BETWEEN lead.position AND endposition
        ) d
    )
    -- Concatenate the codepoints into a Unicode string.
    SELECT @result = CONVERT(xml,
        (
            SELECT NCHAR(codepoint)
            FROM codepoints
            ORDER BY position
            FOR XML PATH('')
        )).value('.', 'nvarchar(max)');

    RETURN @result;
END
GO
ログイン後にコピー

使用法: 「Column1」という名前の列に変換を適用するには、次のクエリを使用できます:

SELECT *, NewColumn1 = dbo.DecodeUTF8String(Column1)
FROM Table1
WHERE Column1 <> dbo.DecodeUTF8String(Column1)
ログイン後にコピー

このクエリは、ISO 8859-1 に変換された UTF-8 テキストを含む新しい列「NewColumn1」を作成します。エンコーディング。

以上がSQL Server で UTF-8 テキストを ISO 8859-1 に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート