2012-04-27 1 views
3

SQL Server Express 2012에서 실행되는 데이터베이스의 특정 열에 대해 문자열 비교시 ss와 ß가 동일한 것으로 간주되지 않는 데이터 정렬이 필요합니다. 또한 ä와 ae, ö와 oe와 ü와 ue는 각각 다른 것으로 간주되어야합니다. Latin1_General_CI_AS는 후자를 제공하지만 ss와 ß는 구별되지 않습니다. 즉, WHERE ThatColumn = 'Fass'FassFaß을 모두 산출합니다.대소 문자를 구분하지 않는 데이터 정렬 필요 ss! = ß

나는 단순히 BIN/BIN2에 충실 하겠지만, 대소 문자를 구분할 필요가 없다. 작동하지 않으면 Latin1_General_BIN/Latin1_General_BIN2를 사용해야하며 모든 것이 대문자이거나 소문자인지 확인해야합니다. 적절한 케이스로 버전을 검색 할 수 있어야하기 때문에 더 많은 작업이 필요합니다.

하지만 필요한 데이터 정렬이있는 경우 알려 주시기 바랍니다. 미리 감사드립니다!

업데이트 : 요구 사항에 대한 추가 정보 : 데이터베이스에는 ASCII 문자 만 지원하는 레거시 시스템의 개인 이름이 들어 있습니다. 즉, Müller 및 Faß와 같은 이름은 Mueller 및 Fass로 저장됩니다. 새로운 시스템에서 사용자는 그 사람의 이름을 바꾸는 기능을 갖게됩니다. "Mueller"의 이름을 "Müller"로 변경하십시오. 이름을 변경해야하는 항목을 찾으려면 예를 들어 행을 검색해야합니다. "Fass". 그러나 이제 쿼리가 "Faß"를 반환합니다. 이것은 내가 원하는 것이 아닙니다. 사용자가 "fass"를 검색하고 "Fass"를 얻을 수 있어야하므로 여전히 무 감정이 필요합니다.

이 시스템에 더 많은하지만 나는 확실히 내가

데이터 정렬 SQL_Latin1_General_CP1_CI_AS 데이터가 'SS' 'ß'다르게 고려
+0

이상한 요구 사항입니다. 어떤 이유? 당신은 그것을 확장 할 수 있습니까? 그것은 단지 s와 ß입니까? 아니면 특별히 다루어야 할 다른 합자/스페셜입니까? – Ben

+0

질문을 업데이트했습니다. 나는 ss와 ß를 구별 할 수 있어야합니다. –

답변

1

, 그래서 SS 및 ß, A와 AE 등을 구별 할 필요가 있음을 말할 수있다 그것은 당신을 위해 일할지도 모른다. 이는 레거시 데이터 정렬이므로 운영 체제 및 응용 프로그램 플랫폼과의 비 호환성을 초래할 수 있습니다. 그것은 내가 모르는 다른 단점을 가지고있을 수도 있습니다.

몇 년 전 나는 유사한 문제에 대한 완고한 해결 방법을 제시했으며, 이것을 here에서 살펴볼 수 있습니다. ("해결 방법 (1)"탭을 클릭하십시오.)이 경우의 문제점은 문자열 비교 결과가 아닌 키 열의 고유성과 관련되어 있으므로 상황에 적용하고 (단일 문자열 비교를 수행 할 두 열을 비교) 실현 불가능할 수도 있습니다.

+0

아니요, 죄송합니다. SQL_Latin1_General_CP1_CI_AS가 작동하지 않습니다. 내가 테스트 한 내용은 다음과 같습니다. http://pastebin.com/nEKJk7bX –

+1

Andre, 테스트가 적절하다고 생각하지 않습니다. 필자는 pastebin 예제의 상수 문자열에 데이터베이스 데이터 정렬이 자동으로 적용되고 해당 데이터 정렬이 비교 대상이 아닌 것으로 판단됩니다. 이 예제를보십시오 : http://sqlfiddle.com/#!3/d5344/6 –

+0

아하! 이제 당신이 nvarchar를 사용하고있는 것을 볼 수 있습니다. 코드 페이지를 지정하는 SQL 데이터 정렬은 작동하지 않습니다. nvarchar를 사용해야하는 경우 운이 좋지 않을 수도 있습니다. –