SQL Server에서 텍스트 값을 UTF-8에서 ISO 8859-1로 변환
문제: UTF-8 인코딩을 사용하는 SQL Server의 열이며 텍스트를 ISO 8859-1로 변환하고 저장해야 합니다. 인코딩.
해결책: 이 변환을 수행하려면 사용자 정의 기능을 활용할 수 있습니다. 다음 코드는 구현을 제공합니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!