Maison > base de données > tutoriel mysql > Comment convertir du texte UTF-8 en ISO 8859-1 dans SQL Server ?

Comment convertir du texte UTF-8 en ISO 8859-1 dans SQL Server ?

Linda Hamilton
Libérer: 2025-01-03 13:37:39
original
973 Les gens l'ont consulté

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

Convertir la valeur du texte d'UTF-8 en ISO 8859-1 dans SQL Server

Problème : Vous avez un colonne dans SQL Server avec encodage UTF-8 et vous devez convertir et enregistrer le texte au format ISO 8859-1 encodage.

Solution : Pour réaliser cette conversion, vous pouvez utiliser une fonction personnalisée. Le code suivant fournit une implémentation :

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
Copier après la connexion

Utilisation : Pour appliquer la conversion à une colonne nommée « Colonne1 », vous pouvez utiliser la requête suivante :

SELECT *, NewColumn1 = dbo.DecodeUTF8String(Column1)
FROM Table1
WHERE Column1 <> dbo.DecodeUTF8String(Column1)
Copier après la connexion

Cette requête créera une nouvelle colonne, "NewColumn1", qui contient le texte UTF-8 converti en ISO 8859-1. encodage.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal