programing

SQL Server 데이터베이스에서 UTF-8 대조 사용 방법

goodsources 2023. 4. 21. 20:48
반응형

SQL Server 데이터베이스에서 UTF-8 대조 사용 방법

데이터베이스를 UTF8을 사용하여 mysql에서 SQL Server(정치), 원래 mysql 데이터베이스로 마이그레이션했습니다.

SQL Server 2008은 utf8을 지원하지 않는다고 https://dba.stackexchange.com/questions/7346/sql-server-2005-2008-utf-8-collation-charset을 읽었는데, 지금 농담하시는 건가요?

SQL Server는 대부분 라틴어로 인코딩된 여러 데이터베이스를 호스트합니다.이행된 db는 웹 퍼블리싱용이기 때문에 utf8-encoding을 유지하고 싶습니다.뭔가 놓쳤거나 어플리케이션레벨에서 enc/dec를 해야 하나요?

UTF-8을 사용하다UTF-8 유니코드 Unicode를 합니다.nvarchar typedata type 니다다 。

데이터베이스가 UTF-8을 사용하여 텍스트를 저장하는 경우에도 인코딩된 UTF-8 데이터로 텍스트를 출력하지 않고 디코딩된 텍스트로 출력합니다.

저장할 수 데이터(UTF-8 인코딩된 텍스트로 저장합니다.varbinary를 참조해 주세요.

드디어 SQL Server 2019에서 지원될 것 같습니다!SQL Server 2019 - 새로운 기능

송신원:

UTF-8 지원

Import 또는 내보내기 인코딩 또는 텍스트 데이터의 데이터베이스 수준 또는 컬럼 수준 조합으로 널리 사용되는 UTF-8 문자 인코딩을 완전히 지원합니다.은 UTF-8로 되어 있습니다.CHAR ★★★★★★★★★★★★★★★★★」VARCHAR 할 때 됩니다. 객체의 조회를 작성 또는 변경할 때 활성화 됩니다.UTF8서픽스

를 들어 '예'라고 하면,LATIN1_GENERAL_100_CI_AS_SC로로 합니다.Latin1_General_100_CI_AS_KS_SC_UTF8 Server2012에서 할 수 있습니다. UTF-8 SQL Server 2012 Windows Windows Server 2012 ut ut ut 。 NCHAR ★★★★★★★★★★★★★★★★★」NVARCHARUTF-16을 사용하다

이 기능은 사용 중인 문자 집합에 따라 상당한 스토리지 절감 효과를 제공할 수 있습니다.들어 ASCII 을 ASCII에서 하는 NCHAR(10)로로 합니다.CHAR(10)UTF-8 지원 데이터 수집을 사용하면 스토리지 요건을 거의 50% 절감할 수 있습니다. 는 ★★★★★★★★★★★★★★★★★★★NCHAR(10) 「22바이트」는 「22바이트」입니다.CHAR(10)유니코드 12번

2019-05-14 업데이트:

매뉴얼은 현재 갱신된 것으로 보이며 "Collation and Unicode Support" 섹션의 MSSQL 2019에서 제공되는 옵션에 대해 설명합니다.

2019-07-24 업데이트:

기사: Pedro Lopes - Azure SQL Database UTF-8 지원 도입에 관한 Microsoft의 시니어 프로그램 매니저

아니야! 장난 아니야.

여기를 봐주세요.http://msdn.microsoft.com/en-us/library/ms186939.aspx

고정길이, nchar 또는 가변길이, nvarchar, Unicode 데이터 중 하나로 UNICODE UCS-2 문자 세트를 사용하는 문자 데이터 유형.

http://en.wikipedia.org/wiki/UTF-16 (영어)도 참조해 주세요.

구식 UCS-2(2바이트 유니버설 문자 세트)는, 1996년 7월에 Unicode 표준의 버전 2.0에서 UTF-16으로 대체된 것과 같은 문자 부호화입니다.

T-SQL에서 UTF-8을 처리하는 UDF는 2개입니다.

CREATE Function UcsToUtf8(@src nvarchar(MAX)) returns varchar(MAX) as
begin
    declare @res varchar(MAX)='', @pi char(8)='%[^'+char(0)+'-'+char(127)+']%', @i int, @j int
    select @i=patindex(@pi,@src collate Latin1_General_BIN)
    while @i>0
    begin
        select @j=unicode(substring(@src,@i,1))
        if @j<0x800     select @res=@res+left(@src,@i-1)+char((@j&1984)/64+192)+char((@j&63)+128)
        else            select @res=@res+left(@src,@i-1)+char((@j&61440)/4096+224)+char((@j&4032)/64+128)+char((@j&63)+128)
        select @src=substring(@src,@i+1,datalength(@src)-1), @i=patindex(@pi,@src collate Latin1_General_BIN)
    end
    select @res=@res+@src
    return @res
end

CREATE Function Utf8ToUcs(@src varchar(MAX)) returns nvarchar(MAX) as
begin
    declare @i int, @res nvarchar(MAX)=@src, @pi varchar(18)
    select @pi='%[à-ï][€-¿][€-¿]%',@i=patindex(@pi,@src collate Latin1_General_BIN)
    while @i>0 select @res=stuff(@res,@i,3,nchar(((ascii(substring(@src,@i,1))&31)*4096)+((ascii(substring(@src,@i+1,1))&63)*64)+(ascii(substring(@src,@i+2,1))&63))), @src=stuff(@src,@i,3,'.'), @i=patindex(@pi,@src collate Latin1_General_BIN)
    select @pi='%[Â-ß][€-¿]%',@i=patindex(@pi,@src collate Latin1_General_BIN)
    while @i>0 select @res=stuff(@res,@i,2,nchar(((ascii(substring(@src,@i,1))&31)*64)+(ascii(substring(@src,@i+1,1))&63))), @src=stuff(@src,@i,2,'.'),@i=patindex(@pi,@src collate Latin1_General_BIN)
    return @res
end

Microsoft SQL Server 2016 현재 UTF-8은 , 및 에서 지원되고 있습니다.

부록 2016-12-21: SQL Server 2016 SP1은 이제 Standard 및 Express를 포함한 모든 버전의 MS SQL에 대해 Unicode 압축(및 기타 대부분의 엔터프라이즈 전용 기능)을 사용할 수 있습니다.이는 UTF-8 지원과 동일하지는 않지만 서양 알파벳의 디스크 공간을 줄이는 것이 목표라면 비슷한 이점을 얻을 수 있습니다.

언급URL : https://stackoverflow.com/questions/12512687/how-to-use-utf-8-collation-in-sql-server-database

반응형