Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Menukar Teks UTF-8 kepada ISO 8859-1 dalam SQL Server?

Bagaimana untuk Menukar Teks UTF-8 kepada ISO 8859-1 dalam SQL Server?

Linda Hamilton
Lepaskan: 2025-01-03 13:37:39
asal
976 orang telah melayarinya

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

Tukar Nilai Teks daripada UTF-8 kepada ISO 8859-1 dalam SQL Server

Masalah: Anda mempunyai lajur dalam SQL Server dengan pengekodan UTF-8 dan anda perlu menukar dan menyimpan teks dalam ISO 8859-1 pengekodan.

Penyelesaian: Untuk mencapai penukaran ini, anda boleh menggunakan fungsi tersuai. Kod berikut menyediakan pelaksanaan:

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
Salin selepas log masuk

Penggunaan: Untuk menggunakan penukaran pada lajur bernama "Lajur1", anda boleh menggunakan pertanyaan berikut:

SELECT *, NewColumn1 = dbo.DecodeUTF8String(Column1)
FROM Table1
WHERE Column1 <> dbo.DecodeUTF8String(Column1)
Salin selepas log masuk

Pertanyaan ini akan membuat lajur baharu, "NewColumn1," yang mengandungi teks UTF-8 yang ditukar kepada ISO 8859-1 pengekodan.

Atas ialah kandungan terperinci Bagaimana untuk Menukar Teks UTF-8 kepada ISO 8859-1 dalam SQL Server?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan