2010-03-25 5 views
2

Oracle 게이트웨이를 통해 SQL Server에 액세스하는 AIX의 이기종 서비스 (ODBC를 통한)를 사용하는 SQL Server의 데이터에 액세스하는 VMS의 Oracle에서 데이터를 마이그레이션하고 있습니다. dg4msql). Oracle VMS 데이터베이스는 WE8ISO8859P1 문자 세트를 사용했습니다. AIX 데이터베이스는 WE8MSWIN1252를 사용합니다. SQL Server 데이터베이스는 sp_helpsort에 따라 "Latin1- 일반, 대/소문자 구분 안 함, 액센트 구분, 일본어 형식에 상관없이 유니 코드 데이터에 대해 폭을 구분하지 않으며 SQL Server 정렬 순서 52는 비 유니 코드 데이터에 사용"을 사용합니다. SQL Server 데이터베이스는 nchar/nvarchar 또는 모든 문자열 열을 사용합니다.Oracle Gateway, SQL Server 및 Application Express와 관련된 문자 집합 문제

Application Express에서 추가 문자가 일부 경우에 표시됩니다. 예를 들어 123은 % 001 % 002 % 003으로 표시됩니다. sqlplus에서는 문제가 없지만 initcap과 같은 Oracle 함수를 사용하면 데이터베이스 링크를 사용하여 SQL Server 데이터베이스를 쿼리 할 때 문자열의 각 문자 사이에 공백으로 나타나는 내용을 볼 수 있습니다. 이는 이전 구성에서 발생하지 않았습니다.

nchar에 여분의 바이트가 있고 Oracle에서 문자 집합으로 변환 할 수 없다고 가정합니다. ODBC 솔루션은 nchars를 지원하지 않았으므로 char로 다시 캐스팅해야하며 ok가 나타났습니다. 캐스팅과 같은 모든 솔루션을 사용할 수 있도록 SQL Server 데이터 만 볼 필요가 있지만 작동하는 것은 없습니다.

이 문제를 해결하는 방법에 대한 아이디어가 있으십니까? 오라클에서 다른 문자 집합을 사용해야합니까? 그렇다면이 중 하나만 신경 써서 모든 스키마에 적용됩니다.

업데이트 :이 질문을 단순화 할 수 있다고 생각합니다. SQL Server 테이블은 nchar을 사용합니다. 테이블에서 덤프 (열)을 선택하면 SQL 서버에 대한 원격 링크에서 선택 여부에 상관없이 값이 'COX'일 때 Len = 6 : 0,67,0,79,0,88을 반환하고 문자 'COX'를 캐스팅합니다. nvarchar로 복사하거나 Oracle 테이블로 nvarchar로 복사합니다. 그러나 열 자체를 선택하면 원격 SQL Server 링크에서 선택할 때만 여분의 공백이 표시됩니다. 왜 덤프가 똑같은 것을 리턴하는지 이해할 수 없지만 덤프를 사용하지 않으면 다른 값을 보여줄 것입니다. 어떤 도움을 주셔서 감사합니다.

답변

4

에 관심이있을 수 있습니다. 해결책은 SQL Server 측에서 nchars를 varchars로 캐스팅하는 뷰를 만드는 것이 었습니다. 그런 다음 게이트웨이를 통해보기에서 선택할 수 있으며 문자 세트를 올바르게 처리했습니다.

+0

번역본을 명시 적으로 정의하기 위해 COLLATE 이있는보기에서 적절한 데이터 정렬을 찾을 수 있습니다 (Oracle NLS Lang FAQ에서 가능). –

+0

도움이 필요하십니까? :) http://stackoverflow.com/questions/36393449/special-characters-in-oracle-nclob –

0

당신은 SQL 서버의 특정 버전에 오라클 게이트웨이 및 NCHAR 간의 비 호환성이있는 Oracle NLS Lang FAQ

+0

그래, 좋은 책이지만 Oracle Gateway 연결을 통해 SQL Server nchar 데이터를 처리하는 방법은 설명하지 않습니다. –