2012-03-19 7 views
1

웹 응용 프로그램은 UTF-8로 인코딩 된 데이터를 VARCHAR 필드에 저장합니다. 최근 DataDirect의 OpenAccess ODBC 드라이버를 사용하여 ODBC를 통해 고객에게이 데이터에 대한 액세스를 제공했습니다. 이는 DataDirect의 OpenAccess SDK를 사용하여 서비스와 인터페이스하기 위해 C# .Net 클래스를 작성함으로써 달성됩니다. 고객은 SELECT 쿼리 만 수행 할 수 있습니다. 현재 결과는 100,000 개의 행으로 제한됩니다.연결된 서버와 ODBC를 사용하여 "요청 된 변환이 지원되지 않음"

이 솔루션은 실제로이 코드화 된 데이터 중 일부가 사용자에게 횡설수설 한 것처럼 보이는 필드를 쿼리하는 것 외에는 훌륭하게 작동합니다. 다음 서비스 릴리스에서는 인코딩되지 않은 문자열을 사용하여 쿼리하고 이후에 인코딩되지 않은 결과를 볼 수있는 기능을 사용자에게 제공하고 싶습니다.

들어오는 쿼리를 UTF-8 인코딩하여 해결 한 다음 VARCHAR 필드를 플래그 지정하여 인코딩되지 않은 결과를 반환하면 WVARCHAR입니다. 이것은 실제로 실제로 잘 작동합니다. 그러나 모든 VARCHAR 열은 유니 코드 문자가 있거나 존재하지 않음에도 불구하고 WVARCHAR로 반환된다는 것을 의미합니다.

현재 많은 고객이 자신의 SQL Server 인스턴스에서 SSMS에 연결된 서버를 만드는 방법을 채택했으며이를 사용하는 것이 좋습니다. 우리의 서비스가 결과를 100K 행으로 제한하기 때문에 모든 사람들이 OPENQUERY를 사용하여 쿼리를 수행하는 것이 좋습니다. SSMS의 Linked Server 구성에서 누락 된 부분이있는 것 같습니다. 문자열 함수 (LEFT, RIGHT, 예를 들어 SUBSTRING가)이 WVARCHAR 컬럼에 대해 수행 될 때, SSMS 다음과 같은 오류를 반환

SELECT * 
FROM OPENQUERY([LOCAL], ' 
    SELECT LEFT(FirstName, 2) AS ColName 
    FROM dbo.User 
') 

:이 이와 같은 질의에 대해 반환 될

OLE DB provider "MSDASQL" for linked server "LOCAL" returned message "Requested conversion is not supported.". Msg 7341, Level 16, State 2, Line 1 Cannot get the current row value of column "[MSDASQL].ColName" from OLE DB provider "MSDASQL" for linked server "LOCAL".

이 쿼리에서 LEFT 함수를 제거하면 오류없이 제대로 디코딩 된 FirstName 열이 반환됩니다.

이 문제는 예를 들어 MS Excel의 쿼리에는 영향을 미치지 않습니다. 그리고 서페이스에서 DataDirect 제품과 인터페이스하는 .Net 클래스를 통해 디버깅 할 때 문자열이 해당 함수에 의해 올바르게 영향을받는 것 같습니다. Linked Server 속성에서 모든 서버 옵션을 변경하려고 시도했지만 올바른 조합을 찾을 수있는 행운이 없었습니다. 나는 여기에 짖는 나무를 찾고 있습니다. WVARCHAR로 변경 한 결과입니까? 아니면 내 SSMS 연결된 서버의 일부 속성을 내가 실종됐다 변경해야합니까?

답변

1

연결된 서버 속성에서 COLLATION COMPATIBLE이 TRUE로 설정된 경우 문제가 해결됩니다.