2014-12-03 9 views
0

현재 LATIN-1을 사용하는 다른 시스템과 호환되지 않는 UTF8 Oracle 데이터베이스의 행 수를 결정하기 위해 SQL 쿼리를 작성해야합니다. 예를 들어Oracle DB 필드의 문자가 UTF8 charset 내에 있지만 SQL과 함께 LATN-1 외부에 있는지 확인하는 방법은 무엇입니까?

, Über는 결과를 반환하지해야하지만 翻译

하는 I는 다음과 같은 쿼리를 시도해야합니다

select decode(convert(convert('Über test', 'WE8ISO8859P1'), 'UTF8'), convert('Über test', 'UTF8'), 1, 0) from dual; 

그러나, 이것은 나에게 내가 원하는 결과를 제공하지 않습니다. 누구든지이 문제에 대한 SQL 전용 솔루션을 제공 할 수 있습니까? 감사합니다.

답변

0

내가 그것을 알아 낸 생각 :

select * from (select asciistr(convert('test string goes here', 'UTF8')) as str from dual) where regexp_like(str, '.*\\([1-9A-F]|0[1-9A-F]).*');

기준으로 http://en.wikipedia.org/wiki/Latin-1_Supplement_%28Unicode_block%29를 사용하여 유니 코드의 LATIN-1 블록은 \의 00FF에서 끝납니다. 사람이 논리적 인 관점에서이 문제를 다시 한 번 확인 할 수 있다면 예를 들어

,

SQL> select * from (select asciistr(convert('翻译', 'UTF8')) as str from dual) where regexp_like(str, '.*\\([1-9A-F]|0[1-9A-F]).*'); 

STR 
------------------------------ 
\7FFB\8BD1 

, 나는 그것을 감사하겠습니다.

1

오라클 버전은 언급하지 않았습니다. 최대 11.2까지,이 목적으로 Oracle 제공 문자 집합 스캐너 (CSSCAN)를 사용해야합니다. 12.1부터 유니 코드 용 Oracle Database Migration Assistant라는 새로운 유틸리티가 있습니다.

+1

조언을 주셔서 감사합니다. 불행히도이 데이터베이스에서 유틸리티를 실행할 수 없습니다. 표준 SQL 쿼리를 통해 실행해야합니다. – dave