Heim > Datenbank > MySQL-Tutorial > Wie konvertiere ich UTF-8-Text in ISO 8859-1 in SQL Server?

Wie konvertiere ich UTF-8-Text in ISO 8859-1 in SQL Server?

Linda Hamilton
Freigeben: 2025-01-03 13:37:39
Original
960 Leute haben es durchsucht

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

Textwert von UTF-8 nach ISO 8859-1 in SQL Server konvertieren

Problem: Sie haben ein Spalte in SQL Server mit UTF-8-Codierung und Sie müssen den Text in ISO 8859-1 konvertieren und speichern Kodierung.

Lösung: Um diese Konvertierung zu erreichen, können Sie eine benutzerdefinierte Funktion verwenden. Der folgende Code stellt eine Implementierung bereit:

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
Nach dem Login kopieren

Verwendung: Um die Konvertierung auf eine Spalte mit dem Namen „Spalte1“ anzuwenden, können Sie die folgende Abfrage verwenden:

SELECT *, NewColumn1 = dbo.DecodeUTF8String(Column1)
FROM Table1
WHERE Column1 <> dbo.DecodeUTF8String(Column1)
Nach dem Login kopieren

Diese Abfrage erstellt eine neue Spalte „NewColumn1“, die den in ISO 8859-1 konvertierten UTF-8-Text enthält Kodierung.

Das obige ist der detaillierte Inhalt vonWie konvertiere ich UTF-8-Text in ISO 8859-1 in SQL Server?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage