문제

MSSQL 데이터베이스가 터키어 콜라이트로 설정된 데 문제가 있습니다. "터키 I"문제가 발생하여, 그 안에 'i'가 포함 된 쿼리 중 어느 것도 올바르게 작동하지 않습니다. 예를 들어,이 경우에 정의 된 "unitID"열이있는 "단위"라는 테이블이있는 경우, "ID"의 소문자 "I"가 정의 된 자본과 다르기 때문에 "unitID"열이 "UnitID"를 선택하십시오. 나는 "unitid"에 있습니다. 오류 메시지는 "잘못된 열 이름 'itid'를 읽습니다.

터키에서 문자 I과 나는 다른 글자로 간주되기 때문에 이것이 일어나고 있다는 것을 알고 있습니다. 그러나이 문제를 해결하는 방법이 확실하지 않습니까? DB의 1900 SP를 모두 거쳐 "I"의 케이스를 수정하는 것은 옵션이 아닙니다.

터키 대신에 사용될 수 있지만 그들의 캐릭터 세트를 지원할 다른 콜라이트의 제안조차도 감사 할 것입니다.

도움이 되었습니까?

해결책

최상의 솔루션은 실제로 모든 SQL과 코드를 리팩터링하는 것이 었습니다.

지난 며칠 동안 나는 저장된 모든 Procs, Functions, View, Tablemename을 일관되게하고 올바른 케이스를 사용하기 위해 리팩토링 앱을 작성했습니다.

select unitid from dbo.unit 

변경됩니다

select UnitId from dbo.Unit

그런 다음 앱은 코드를 통해 저장된 Proc 및 해당 매개 변수의 발생을 대체하여 DB에 정의 된 케이스에 맞게 수정합니다. 앱의 모든 데이터블은 불변의 로케일로 설정되어 있습니다 (모든 DataTables를 지적하기위한 FXCOP 덕분). 이는 코드 내의 통화가 CASE에 민감해야합니다.

앱을 원하는 사람이나 프로세스에 대한 조언을 원하시면 dotnetvixen@gmail.com으로 저에게 연락 할 수 있습니다.

다른 팁

아마도 여기서 문제를 이해하지 못하지만 데이터베이스가 사례에 민감하고 쿼리가 아니기 때문에 더 이상 가능하지 않습니까? 예를 들어, Sybase에서는 다음을 수행 할 수 있습니다.

USE master
GO
EXEC sp_server_info 16
GO

내 데이터베이스가 대소 문자를 사용하지 않는다는 것을 알려줍니다.

attribute_id   attribute_name     attribute_value 
          16   IDENTIFIER_CASE    MIXED

사용중인 콜라이트를 변경할 수 있다면 변하지 않는 로케일을 사용해보십시오. 그러나 고객 이름 및 주소와 같은 다른 것들에 영향을 미치지 않도록하십시오. 고객이 자신의 이름을 검색하는 데 무의미한 검색에 익숙하다면, 동등한 것이 멈추거나 나와 나와 동등한 것을 중지하는 경우에는 마음에 들지 않을 것입니다.

데이터베이스 콜레이션을 기본값으로 변경할 수 있습니까? 이렇게하면 모든 텍스트 열에 터키어 칼라이션이 남게됩니다.

쿼리는 작동하지만 데이터는 올바르게 작동합니다. 이론에 의하면...

템프 테이블과 varchar 열이있는 테이블 변수가있는 gotchas가 있습니다.

나는 당신이 문제를 해결하기 위해 모든 저장된 절차를 거치고 싶지 않지만 문제를 해결하기 위해 리팩토링 도구를 사용해도 괜찮을 것입니다. 나는 살펴 보라고한다 SQL 리팩터. 나는 그것을 사용하지 않았지만 유망 해 보인다.

나는 터키 지원을 가진 많은 시스템을 개발했으며 이것은 당신이 말한 것처럼 잘 알려진 문제입니다.

데이터베이스 설정을 UTF-8로 변경하는 모범 사례는 바로 그게 IT입니다. 모든 문제를 해결해야합니다.

SQL Server에서 지원하는 데 문제가 될 수있는 (ı-i, i-İ)에서 사례 감수성을 지원하려면 문제가 발생할 수 있습니다. 전체 입구가 웹에서 나오면 UTF-8이 확인하십시오.

웹 UTF-8 입력 및 SQL 서버 설정을 UTF-8로 유지하면 모든 것이 원활하게 진행되어야합니다.

기계의 지역 설정을 영어 (미국)로 변경하면 하루가 완전히 절약됩니다!

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