> 데이터 베이스 > MySQL 튜토리얼 > SQL Server에서 UTF-8 텍스트를 ISO 8859-1로 변환하는 방법은 무엇입니까?

SQL Server에서 UTF-8 텍스트를 ISO 8859-1로 변환하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2025-01-03 13:37:39
원래의
1001명이 탐색했습니다.

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

SQL Server에서 텍스트 값을 UTF-8에서 ISO 8859-1로 변환

문제: UTF-8 인코딩을 사용하는 SQL Server의 열이며 텍스트를 ISO 8859-1로 변환하고 저장해야 합니다. 인코딩.

해결책: 이 변환을 수행하려면 사용자 정의 기능을 활용할 수 있습니다. 다음 코드는 구현을 제공합니다.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

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"이라는 열에 변환을 적용하려면 다음 쿼리를 사용할 수 있습니다.

1

2

3

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿