Support
Orange Support > 문의하기
Q & A
Re: Re: Re: NLS 질문
Date2002.07.22 /
Hit : 16392
한글이 깨진 거 맞습니다.
한글이 깨진 거 맞습니다. 앞서의 답변과 마찬가지로 Query 를 하는 쪽과, 데이타가 저장된 서버측과의 Characterset 설정이 다르면 데이타는 깨집니다. 그리고, characterset conversion 이란 것이 단순한 1byte <-> 2byte 이런식의 변환은 아닙니다. 자신이 사용하도록 설정된 characterset에 위배되는 글자가 들어있으면 characterset 변환시 깨지도록 되어 있습니다. US7ASCII characterset의 경우는 원칙적으로 한글이 사용될 수 있는 문자집합이 아니죠. ASCII 는 7bit 문자의 집합이니까요. 그럼에도 불구하고 한글이 깨지지 않는 경우가 있는 것은 양쪽의 characterset이 같은 경우는 characterset conversion이 일어나지 않기 때문입니다. 양쪽의 문자집합이 다른 경우라면 반드시 characterset conversion이 발생하게 되고, 자신의 문자집합에 있지 않은 16bit 문자인 한글은 깨지는 것이 당연합니다. 따라서 짱구님의 환경에서는 두 서버의 characterset을 일치시켜 주셔야만이 다른 서버의 글자를 db link를 사용하여 정상적으로 select할 수 있습니다. 도움이 되었기를 바랍니다.
---------- Original Message ----------
이름 : 짱구 제목 : 두 서버간의 CHARACTERSET 이 다른면 한글이 제대로 나오는 것은 기대할 수 없습니다. 제발 알려주세요.. ㅠ.ㅠ 많은 게시판에 질문 올렸는데 아무도 답변을 안해줘요 AMERICAN_AMERICA.US7ASCII를 사용하는 DB에서 KOREAN_KOREA.KO16KSC5601 캐릭터셋을 사용하는 DB에 DB링크를 써서 조회하면 한글이 ???로 나오잖아요.. KOREAN_KOREA.KO16KSC5601 캐릭터셋을 사용하는 DB에서 AMERICAN_AMERICA.US7ASCII를 사용하는 DB에 DB링크를 써서 조회하면 한글이 @:=G@L 1]=G@L 5P:q?!@L <= 이렇게 나오는데 이런 현상도 한글이 깨진건가요?? 상식적으로 생각하면, 2byte 캐릭터셋을 사용하는데서 1byte 캐릭터 셋을 사용하는 DB의 문자를 읽어오면 깨지지 않을것 같은데.. -_-;; 제발 알려주세요.. 꾸벅꾸벅~ -.-
---------- Original Message ----------
이름 : Orange 제목 : 두 서버간의 CHARACTERSET 이 다른면 한글이 제대로 나오는 것은 기대할 수 없습니다. 질문하신 상황이 잘 이해가 가지 않는군요. 어느 DB에서 어느 DB로 Query를 했는지가 명확하지가 않네요. Local 의 Character Set과 DB Server의 Character Set이 다르다면 내부적으로 무조건 Characterset Conversion이 일어나게 됩니다. 따라서 양쪽의 Characterset이 다르다면 한글은 안나온다고 생각하시면 됩니다. 감사합니다.
---------- Original Message ----------
이름 : 짱구 제목 : NLS 질문 안녕하세요.. [제 PC(Win2000)의 환경]: KOREAN_KOREA.KO16KSC5601 <= registry에 등록된 정보 KOREAN_KOREA.KO16KSC5601 <= DB내에 등록된 정보 [원격 유닉스 서버의 환경]: AMERICAN_AMERICA.US7ASCII <= .profile에 등록된 NLS_LANG정보 AMERICAN_AMERICA.US7ASCII <= DB내에 등록된 정보 [DB 링크 생성]: 제 PC의 DB[DB NAME: AAA]---> 원격 유닉스 서버의 DB [DB:BBB] [DB link DBA01 생성 ] 제 PC의 DB[DB NAME: AAA]<--- 원격 유닉스 서버의 DB [DB:BBB] [DB link DBA02 생성 ] [CASE1] - AAA 디비[ KO16KSC5601 ]의 scott.emp ㅡㅡㅡㅡ|ㅡㅡㅡㅡㅡ|ㅡㅡㅡㅡㅡㅡㅡㅡ empno | ename | job ㅡㅡㅡㅡ|ㅡㅡㅡㅡㅡ|ㅡㅡㅡㅡㅡㅡㅡㅡ 8001 | 은실이 | clerk ㅡㅡㅡㅡ|ㅡㅡㅡㅡㅡ|ㅡㅡㅡㅡㅡㅡㅡㅡ 8002 | 금실이 | 디비에이 ㅡㅡㅡㅡ|ㅡㅡㅡㅡㅡ|ㅡㅡㅡㅡㅡㅡㅡㅡ - 원격 유닉스 서버에서 디비링크 'DBA02'를 사용하여 AAA디비의 emp를 조회했을때의 결과.. SQL> select * from emp@DBA02; ㅡㅡㅡㅡ|ㅡㅡㅡ--ㅡ|ㅡㅡㅡㅡㅡㅡㅡㅡ empno | ename | job ㅡㅡㅡㅡ|ㅡㅡㅡ--ㅡ|ㅡㅡㅡㅡㅡㅡㅡㅡ 8001 | ??? | clerk ㅡㅡㅡㅡ|ㅡㅡㅡㅡ--|ㅡㅡㅡㅡㅡㅡㅡㅡ 8002 | ??? | ??? ㅡㅡㅡㅡ|ㅡㅡㅡㅡ--|ㅡㅡㅡㅡㅡㅡㅡㅡ => KO16KSC5601(2byte 캐릭터셋) > US7ASCII(1byte 캐릭터셋) 이므로 이 경우에는 한글이 깨져 서 출력되는게 당연한데, 아래 [CASE2]의 결과는 왜 정상적으로 나오지 않을까요??? [CASE2] - BBB 디비[ US7ASCII ]의 scott.emp ㅡㅡㅡㅡ|ㅡㅡㅡㅡ|ㅡㅡㅡㅡㅡㅡㅡㅡ empno | ename | job ㅡㅡㅡㅡ|ㅡㅡㅡㅡ|ㅡㅡㅡㅡㅡㅡㅡㅡ 8001 | 은실이 | ㅡㅡㅡㅡ|ㅡㅡㅡㅡ|ㅡㅡㅡㅡㅡㅡㅡㅡ 8002 | 금실이 | 디비에이 ㅡㅡㅡㅡ|ㅡㅡㅡㅡ|ㅡㅡㅡㅡㅡㅡㅡㅡ - 제 PC의 client에서 디비링크 'DBA01'을 사용하여 BBB디비의 emp를 조회했을때의 결과.. SQL> select * from emp@DBA01; ㅡㅡㅡㅡ|ㅡㅡㅡ--ㅡ|ㅡㅡㅡㅡㅡㅡ
한글이 깨진 거 맞습니다. 앞서의 답변과 마찬가지로 Query 를 하는 쪽과, 데이타가 저장된 서버측과의 Characterset 설정이 다르면 데이타는 깨집니다. 그리고, characterset conversion 이란 것이 단순한 1byte <-> 2byte 이런식의 변환은 아닙니다. 자신이 사용하도록 설정된 characterset에 위배되는 글자가 들어있으면 characterset 변환시 깨지도록 되어 있습니다. US7ASCII characterset의 경우는 원칙적으로 한글이 사용될 수 있는 문자집합이 아니죠. ASCII 는 7bit 문자의 집합이니까요. 그럼에도 불구하고 한글이 깨지지 않는 경우가 있는 것은 양쪽의 characterset이 같은 경우는 characterset conversion이 일어나지 않기 때문입니다. 양쪽의 문자집합이 다른 경우라면 반드시 characterset conversion이 발생하게 되고, 자신의 문자집합에 있지 않은 16bit 문자인 한글은 깨지는 것이 당연합니다. 따라서 짱구님의 환경에서는 두 서버의 characterset을 일치시켜 주셔야만이 다른 서버의 글자를 db link를 사용하여 정상적으로 select할 수 있습니다. 도움이 되었기를 바랍니다.
---------- Original Message ----------
이름 : 짱구 제목 : 두 서버간의 CHARACTERSET 이 다른면 한글이 제대로 나오는 것은 기대할 수 없습니다. 제발 알려주세요.. ㅠ.ㅠ 많은 게시판에 질문 올렸는데 아무도 답변을 안해줘요 AMERICAN_AMERICA.US7ASCII를 사용하는 DB에서 KOREAN_KOREA.KO16KSC5601 캐릭터셋을 사용하는 DB에 DB링크를 써서 조회하면 한글이 ???로 나오잖아요.. KOREAN_KOREA.KO16KSC5601 캐릭터셋을 사용하는 DB에서 AMERICAN_AMERICA.US7ASCII를 사용하는 DB에 DB링크를 써서 조회하면 한글이 @:=G@L 1]=G@L 5P:q?!@L <= 이렇게 나오는데 이런 현상도 한글이 깨진건가요?? 상식적으로 생각하면, 2byte 캐릭터셋을 사용하는데서 1byte 캐릭터 셋을 사용하는 DB의 문자를 읽어오면 깨지지 않을것 같은데.. -_-;; 제발 알려주세요.. 꾸벅꾸벅~ -.-
---------- Original Message ----------
이름 : Orange 제목 : 두 서버간의 CHARACTERSET 이 다른면 한글이 제대로 나오는 것은 기대할 수 없습니다. 질문하신 상황이 잘 이해가 가지 않는군요. 어느 DB에서 어느 DB로 Query를 했는지가 명확하지가 않네요. Local 의 Character Set과 DB Server의 Character Set이 다르다면 내부적으로 무조건 Characterset Conversion이 일어나게 됩니다. 따라서 양쪽의 Characterset이 다르다면 한글은 안나온다고 생각하시면 됩니다. 감사합니다.
---------- Original Message ----------
이름 : 짱구 제목 : NLS 질문 안녕하세요.. [제 PC(Win2000)의 환경]: KOREAN_KOREA.KO16KSC5601 <= registry에 등록된 정보 KOREAN_KOREA.KO16KSC5601 <= DB내에 등록된 정보 [원격 유닉스 서버의 환경]: AMERICAN_AMERICA.US7ASCII <= .profile에 등록된 NLS_LANG정보 AMERICAN_AMERICA.US7ASCII <= DB내에 등록된 정보 [DB 링크 생성]: 제 PC의 DB[DB NAME: AAA]---> 원격 유닉스 서버의 DB [DB:BBB] [DB link DBA01 생성 ] 제 PC의 DB[DB NAME: AAA]<--- 원격 유닉스 서버의 DB [DB:BBB] [DB link DBA02 생성 ] [CASE1] - AAA 디비[ KO16KSC5601 ]의 scott.emp ㅡㅡㅡㅡ|ㅡㅡㅡㅡㅡ|ㅡㅡㅡㅡㅡㅡㅡㅡ empno | ename | job ㅡㅡㅡㅡ|ㅡㅡㅡㅡㅡ|ㅡㅡㅡㅡㅡㅡㅡㅡ 8001 | 은실이 | clerk ㅡㅡㅡㅡ|ㅡㅡㅡㅡㅡ|ㅡㅡㅡㅡㅡㅡㅡㅡ 8002 | 금실이 | 디비에이 ㅡㅡㅡㅡ|ㅡㅡㅡㅡㅡ|ㅡㅡㅡㅡㅡㅡㅡㅡ - 원격 유닉스 서버에서 디비링크 'DBA02'를 사용하여 AAA디비의 emp를 조회했을때의 결과.. SQL> select * from emp@DBA02; ㅡㅡㅡㅡ|ㅡㅡㅡ--ㅡ|ㅡㅡㅡㅡㅡㅡㅡㅡ empno | ename | job ㅡㅡㅡㅡ|ㅡㅡㅡ--ㅡ|ㅡㅡㅡㅡㅡㅡㅡㅡ 8001 | ??? | clerk ㅡㅡㅡㅡ|ㅡㅡㅡㅡ--|ㅡㅡㅡㅡㅡㅡㅡㅡ 8002 | ??? | ??? ㅡㅡㅡㅡ|ㅡㅡㅡㅡ--|ㅡㅡㅡㅡㅡㅡㅡㅡ => KO16KSC5601(2byte 캐릭터셋) > US7ASCII(1byte 캐릭터셋) 이므로 이 경우에는 한글이 깨져 서 출력되는게 당연한데, 아래 [CASE2]의 결과는 왜 정상적으로 나오지 않을까요??? [CASE2] - BBB 디비[ US7ASCII ]의 scott.emp ㅡㅡㅡㅡ|ㅡㅡㅡㅡ|ㅡㅡㅡㅡㅡㅡㅡㅡ empno | ename | job ㅡㅡㅡㅡ|ㅡㅡㅡㅡ|ㅡㅡㅡㅡㅡㅡㅡㅡ 8001 | 은실이 | ㅡㅡㅡㅡ|ㅡㅡㅡㅡ|ㅡㅡㅡㅡㅡㅡㅡㅡ 8002 | 금실이 | 디비에이 ㅡㅡㅡㅡ|ㅡㅡㅡㅡ|ㅡㅡㅡㅡㅡㅡㅡㅡ - 제 PC의 client에서 디비링크 'DBA01'을 사용하여 BBB디비의 emp를 조회했을때의 결과.. SQL> select * from emp@DBA01; ㅡㅡㅡㅡ|ㅡㅡㅡ--ㅡ|ㅡㅡㅡㅡㅡㅡ
NLS 질문
짱구
2002.07.12
Re: NLS 질문
오렌지팀
2002.07.12
Re: Re: NLS 질문
짱구
2002.07.16
Re: Re: Re: NLS 질문
오렌지팀
2002.07.22