메뉴 바로가기 본문 바로가기
Support

Orange board

공백 문자 삽입 시, '?' 문자 관련

박진찬 2019-07-15

정확한 응답을 위해 아래의 정보를 포함하여 질문을 작성해 주십시오.

 - 제품명 및 버전: orange for oracle 5.0.12

 - DBMS 버전: ORACLE
 - DB Client 버전: 11.2.0.1.0
 - OS 버전: windows 10


안녕하세요. 

아래와 같이 공백 문자가 '?'로 보이는 현상이 있습니다. 

SQL Developer 툴을 사용하면 '?' 문자가 보이지 않는데 인터넷에서 가이드 되어 있는 내용으로 진행을 해도 데이터가 잘 나오지 않습니다. 


해당 테이블을 EAI 를 통해 MSSQL로 인터페이스 하고 있는데, MSSQL에서도 동일하게 '?' 문자가 보이네요. 

해결 방법 가이드 부탁 드립니다. 


(하기 테이블에서는 일부분만 이렇게 보이지만, 특정 테이블은 모든 데이터에 '?'가 포함 되어 있는 경우도 있습니다)


 

 


첨부파일
    등록된 파일이 없습니다.
안녕하세요. 웨어밸리 오렌지팀입니다.

1. Oracle 클라이언트, 즉 sqlplus를 통한 쿼리시에 동일한 데이터에 대해 확인하여 주시기 바랍니다.
2. 실제 데이터에 대한 확인을 위해 select ‘가 나 다’ as a, ‘a b c’ as b from dual 을 실행하여 결과 창을 확인하여 주시기 바랍니다.
3. Grid Resutl가 아닌 Text Result에서도 동일하게 보여지는지도 확인 바랍니다.

3. 또한 아래쪽 첨부해주신 NLS_LANG 값은, 전체적인 값을 모두 확인해야 합니다.
Database Information 을 통해서, NLS Parameter 부분을 모두 확인하시어 서버의 설정을 확인하시기 바랍니다.
오렌지팀2019-09-03
안녕하세요. 웨어밸리 오렌지팀입니다.

전달해주신 내용에 대한 설명을 드리도록 하겠습니다.
1. sqlplus를 통한 쿼리시에 동일한 데이터에 대해 확인
? SQL Plus에서 동일한 데이터 양상을 보이고 있습니다.
저희 오렌지는 SQL Plus와 동일하게 보여지도록 설계되어있습니다.
따라서 SQL Plus에서 정상적으로 표시가 되어야, Orange에서도 동일하게 표시된다고 말씀드릴 수 있습니다.
2. 3. select ‘가 나 다’ as a, ‘a b c’ as b from dual (Grid /Text)
? 1과 마찬가지로 서버를 통해서 들어오는, 기존에 입력된 데이터는 아니지만, 일반 공백문자를 표시할 때,
정상적으로 표시되는 것을 확인 하실 수 있습니다.
한글도 마찬가지로 정상적으로 표시되고 있는 것을 확인하실 수 있습니다.
4. NLS Parameter 확인
? 해당 내용 또한 ORACLE의 HOME 에 따로 설정된 NLS_LANG 값을 변경하지 않는다면,
정상적으로 표시되어야 할 것으로 생각됩니다.

먼저 SQLPlus에서 ? 가 표시되는 원인을 확인하셔야 할 것으로 생각됩니다.
따라서 말씀하신 SQL Developer에서 설정하는 값에 대한 확인 작업과,
공백이라고 말씀하신 “근태?누락” 표시하신 데이터에 대한 확인이 필요할 것으로 생각됩니다.
해당 PC의 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ORACLE\에 위치한
Orange 에서 사용하는 Home 의 NLS_LANG 값과,
SQL Developer에서 사용하는 값의 비교 및,
to_char(rawtohex(…..)) 를 사용하여 해당하는 데이터에 대한 HEX값 확인을 통해,
실제 공백 데이터가 20으로 표시되고 있는지도 한 번 확인하여 주시기 바랍니다.
예를 들어, 다음의 sql 문장을 실행할 경우, 공백에 대해 20으로 표시됩니다.
Select to_char(rawtohex(‘ ‘)) from dual
오렌지팀2019-09-03
안녕하세요. 웨어밸리 오렌지 팀입니다.

해당 데이터가 맞습니다.
WHY 컬럼의 실제 화면에 ?표로 보이는 부분이 위에 정상으로 보이는,
값과 달리, 공백문자인 20이 아닌, C2A0값을 가진 것으로 확인됩니다.
C2A0값에 대해서는 chr(49824) 와 같이, 1바이트 공백이 아닌 2바이트 공백문자를 말합니다.

chr(32)
1byte
trim가능, replace 처리가 space로 만든 공백으로 가능

chr(49824)
2byte
trim불가, replace 처리가 space로 만든 공백으로는 불가능

출처: https://babolsk.tistory.com/1037 [사소한 경험 기록공간]



해당 데이터에서 어떤 이유로 같은 공백 표현 값을 20과 C2A0으로
각각 1바이트 공백/ 2바이트 공백으로 사용하는지 이유는 알 수 없으나,
해당 데이터베이스가 AL32UTF8로 Unicode 데이터로서 적합한 상태이므로,
기존 Orange for Oracle 의 Ansi 버전이 아닌 Unicode 버전으로 설치하여 사용하시면
자료 검색에 불편함은 없을 것이라 생각됩니다.
(마찬가지로 SQLPlus 도 Ansi 로 구성되어있어서 동일하게 ?로 표시된 것으로 생각됩니다.)
기존에 이미 설치하신 Ansi 버전이 있으시면,
Unicode 버전으로 추가 설치하실 경우 라이선스에 영향을 미치지 않으므로,
정상적으로 사용 가능합니다.
-
안녕하세요. 웨어밸리 오렌지팀입니다.

종합적으로 봤을 때, 데이터의 문제로 보셔야 할 것으로 생각됩니다.
일반적인 공백문자는 CHR(32) 값 이어야 하지만,
말씀하신 것처럼, 데이터의 이관과 같은 일이 발생했을 때,
일반 공백문자를 CHR(49824)로 변환되는 일이 종종 발생한다고 하는 사람도 있습니다.
https://thdnf1004.tistory.com/entry/ORA12899-value-too-large-for-column

다만 Orange에서 Unicode를 Ansi로 변환하는 과정을 거치지 않아서,
NLS_LANG 값의 설정을 따르지 않고, Unicode 그대로 표시하기 때문에,
Unicode로 보시라고 말씀 드리는 것이지,
데이터 자체가 CHR(32)로 변경되거나 하진 않습니다.
따라서 MS-SQL에서 보이는 ‘?’가 보이는 데이터가 변경되진 않습니다.

해당 변경 현상에 대해서는 CHR(49824)로 구글 검색해 보시거나,
Oracle에 문의해 보시면, 더 자세한 내용을 찾으실 수 있을 거라 생각합니다.
https://community.oracle.com/thread/1073969?tstart=0

또한 EAI가 실행되는 PC에서 Unicode 버전 설치를 한다고 해서
해결되는 내용은 아닐 것이라 생각됩니다.

감사합니다.
오렌지팀2019-09-03