문제

수 있는 규정이 있을 때 우리가 사용해야 합니코드 형식?

내가 본 대부분의 유럽 언어(독일어,이탈리아어,영어,...)은 동일한 데이터베이스에서 VARCHAR 열이 있습니다.

내가 찾는 다음과 같습니다.

  1. 이 있는 경우 중국-->이며 사용
  2. 는 경우에 당신은 독일어,아랍어-->이며 사용

에 대해 무엇의 콜레이션 서버는/데이터베이스?

내가 사용하고 싶지 않은 항상 이며 다음과 같은 여기에 제안 주요 성과의 차이점 varchar 및 이며 SQL 서버 데이터 형식은?

도움이 되었습니까?

해결책

를 원하는 진짜 이유를 사용하여 이며 때 당신 다른 언어 같은 열에,당신은 주소에서 열 T-SQL 없는 디코딩하려면,당신이 볼 수있는 데이터는"기본"또는 카탈로그 뷰 쿼리,또는 당신이 원하는 표준화에서는 유니코드를 기반으로 합니다.

치료하는 경우에는 데이터베이스로 벙어리장,그것은 완전하게 가장 넓은 문자열과 다른(도 가변 길이)인코딩에 VARCHAR(예를 들어 UTF-8).문제는 당신이 시도하고 있는 인코딩하고 해독하고,특히 경우에는 코드는 페이지가 다른 다른 행이 있습니다.그것은 또한 SQL 서버지 않을 것과 거래를 할 수 있는 데이터를 쉽게의 목적에 대한 쿼리를 내 T-SQL 에(잠재적으로 가변)인코딩된 열이 있습니다.

를 사용하여 이며 피하는 모든이다.

내가 권하고 이며 어떤 열리는 것에는 사용자가 입력한 데이터에서는 상대적으로 제한 없음.

나 VARCHAR 에 대한 열 자연적인 키(같은 차량 번호판,주민번호,일련번호,서비스,태그를 순서 번호,공항 교 등)에는 일반적으로 정의된 표준 또는 법률 또는 규칙입니다.또한 VARCHAR 에 대한 사용자 입력,그리고 매우 제한(전화번호)또는 코드(ACTIVE/CLOSED,Y/N,M/F,M/S/D/W,etc.).절대적으로 아무 이유도 없을 사용하여 이며습니다.

그래서를 위한 간단한 규칙

VARCHAR 을 때 보장된 제한 이며 그렇지 않으면

다른 팁

여러 언어를 저장해야 할 때 언제든지 Nvarchar를 사용해야합니다. 나는 당신이 아시아 언어에 그것을 사용해야한다고 생각하지만 그것을 인용하지는 않습니다.

예를 들어 러시아어를 복용하고 Varchar에 저장하면 문제가 있습니다. 올바른 코드 페이지를 정의하는 한 괜찮을 것입니다. 그러나 기본 영어 SQL 설치를 사용하면 러시아 문자가 올바르게 처리되지 않는다고 가정 해 봅시다. nvarchar ()를 사용하는 경우 올바르게 처리됩니다.

편집하다

알겠습니다. 인용하겠습니다 MSDN 그리고 Maybee 나는 구체적 이었지만 varcar 열에 하나의 코드 페이지 이상을 저장하고 싶지는 않지만 할 수는 없습니다.

char, varchar, varchar (max) 또는 텍스트 데이터 유형에 저장된 텍스트 데이터를 처리 할 때 고려해야 할 가장 중요한 제한은 단일 코드 페이지의 정보 만 시스템에 의해 검증 될 수 있다는 것입니다. (여러 코드 페이지에서 데이터를 저장할 수는 있지만 권장하지 않습니다.) 데이터를 검증하고 저장하는 데 사용되는 정확한 코드 페이지는 열의 충돌에 따라 다릅니다. 열 수준의 콜레이션이 정의되지 않은 경우 데이터베이스의 콜레이션이 사용됩니다. 주어진 열에 사용되는 코드 페이지를 결정하려면 다음 코드 예제와 같이 CollationProperty 함수를 사용할 수 있습니다.

다음은 다음과 같습니다.

이 예제는 그루지야 및 힌디어와 같은 많은 지역이 유니 코드 전용 콜라주이므로 코드 페이지가 없다는 사실을 보여줍니다. 이러한 콜라이트는 Char, Varchar 또는 텍스트 데이터 유형을 사용하는 열에 적합하지 않습니다.

따라서 조지아 나 힌디어는 실제로 Nvarchar로 저장해야합니다. 아랍어도 문제입니다.

당신이 겪을 수있는 또 다른 문제는 지원하려는 모든 문자가 코드 페이지에 포함되어 있지 않을 때 데이터를 저장할 수 없다는 것입니다. 대부분의 경우 Windows는 특정 코드 페이지를 "가장 적합한"코드 페이지로 간주합니다. 즉, 모든 텍스트를 처리하기 위해 코드 페이지에 의존 할 수 있다는 보장이 없습니다. 그것은 단지 최고의 사용 가능한 것입니다. 이것의 예는 아랍어 스크립트입니다. 그것은 Baluchi, Berber, Farsi, Kashmiri, Kazakh, Kirghiz, Pashto, Sindhi, Uighur, Urdu 등을 포함한 다양한 언어를 지원합니다. 이 모든 언어에는 Windows Code Page 1256에 정의 된 아랍어 언어 이외의 추가 문자가 있습니다. 아랍어 Collation이있는 비 니코 코드 열에 이러한 추가 문자를 저장하려고하면 문자가 물음표로 변환됩니다.

유니 코드를 사용할 때 명심해야 할 것도 단일 열에 다른 언어를 저장할 수 있지만 단일 콜레이션 만 사용하여 정렬 할 수 있습니다. 라틴 문자를 사용하지만 다른 라틴어 언어와 같이 분류하지 않는 언어가 있습니다. 악센트는 이것의 좋은 예입니다. 예를 기억할 수는 없지만 Y가 영어 Y처럼 분류하지 않은 동유럽 언어가있었습니다. 그러면 스페인 사용자가 H 이후에 분류되는 스페인의 CH가 있습니다.

내재화를 다룰 때 다루어야 할 모든 문제와 함께. 처음부터 유니 코드 문자를 사용하는 것이 더 쉽다는 것은 내 의견입니다. 여분의 변환을 피하고 공간을 치는 것이 더 쉽습니다. 따라서 내 진술은 일찍.

그리스어는 N 컬럼 유형에서 UTF-8이 필요합니다 : αβγ;)

Josh는 다음과 같이 말합니다. ".... 유니 코드를 사용할 때 명심해야 할 것도 단일 열에 다른 언어를 저장할 수 있지만 단일 콜레이션을 사용 하여만 정렬 할 수 있습니다. 라틴 문자를 사용하지만 분류하지 않는 일부 언어가 있습니다. 다른 라틴어 언어. 악센트는 이것의 좋은 예입니다. 나는 예를 기억할 수 없지만 당신은 영어 Y처럼 분류하지 않은 동유럽 언어가있었습니다. 그런 다음 스페인 사용자가 정렬 할 스페인의 CH가 있습니다. h 후. "

나는 원어민 스페인어 사용자이며 "CH"는 문자가 아니라 2 개의 "C"와 "H"이며 스페인 알파벳은 다음과 같습니다. 알파벳은 ñ 또는 html "ñ"을 제외하고 영어와 동일합니다.

알렉스

tl; dr;
유니 코드 - (NCHAR, NVARCHAR 및 NTEXT)
비 유니 코드 - (char, varchar 및 텍스트).

MSDN에서

SQL Server의 Collation은 데이터에 대한 정렬 규칙, 케이스 및 악센트 감도 속성을 제공합니다. Char 및 Varchar와 같은 문자 데이터 유형과 함께 사용되는 콜라이트는 코드 페이지와 해당 데이터 유형에 대해 표현할 수있는 해당 문자를 지시합니다.

기본 SQL Collation을 사용하고 있다고 가정합니다 SQL_Latin1_General_CP1_CI_AS 그런 다음 다음 스크립트에 맞는 모든 기호를 인쇄해야합니다. VARCHAR 인쇄 된 목록에 표시되지 않으면 하나의 바이트를 사용하여 하나의 문자 (총 256)를 저장하므로 필요합니다. NVARCHAR.

declare @i int = 0;
while (@i < 256)
begin
print cast(@i as varchar(3)) + '  '+  char(@i)  collate SQL_Latin1_General_CP1_CI_AS 
print cast(@i as varchar(3)) + '  '+ char(@i)  collate Japanese_90_CI_AS  
set @i = @i+1;
end

일본어로 콜레이션을 변경하면 모든 이상한 유럽의 편지가 정상으로 바뀌고 일부 상징이 ? 점수.

유니 코드는 코드 포인트를 문자에 매핑하는 표준입니다. 세계의 모든 언어의 모든 문자를 다루도록 설계되었으므로 다른 코드 페이지가 다른 문자 세트를 처리 할 필요가 없습니다. 여러 언어를 반영하는 문자 데이터를 저장하는 경우 비 노니 코드 데이터 유형 (Char, Varchar 및 Text) 대신 항상 유니 코드 데이터 유형 (NCHAR, NVARCHAR 및 NTEXT)을 사용하십시오.

그렇지 않으면 정렬이 이상해집니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top