SSISO Community

시소당

토드에서 쿼리시 한글이 깨질때

한글을  입력  했는데  조회시  ??????형태로  나타난다
원인은    데이터베이스  언어  환경과  클라이언트  언어  환경이  일치  하지  않아서  생기는  경우이다
일단  두곳의  언어  환경을  비교  해보는것이  중요한다

현재  DB에  설정되여있는  한글  타입(  CHARACTER  SET)  이  어찌  되였는지  조회해보자  
D:work>sqlplus  "/  as  sysdba"

SQL*Plus:  Release  10.1.0.2.0  -  Production  on  화  7월  13  09:04:21  2004
Copyright  (c)  1982,  2004,  Oracle.    All  rights  reserved.

Connected  to:
Oracle  Database  10g  Release  10.1.0.2.0  -  Production

SQL>  SELECT  NAME,VALUE$  FROM  PROPS$
                              WHERE  NAME  ='NLS_LANGUAGE'  OR
                                                      NAME  ='NLS_TERRITORY'  OR
                                                      NAME  ='NLS_CHARACTERSET';

NAME                                                                                                              VALUE$
--------------------------------------------------------------------------------NLS_LANGUAGE                                                                          AMERICAN
NLS_TERRITORY                                                                          AMERICA
NLS_CHARACTERSET                                                            KO16MSWIN949
  

NLS_LANGUAGE    :데이터  베이스에서  메세지를  보여줄때의  메세지  언어  설정이다  AMERICAN  되여있다  
NLS_TERRITORY  :금액을  표시  할때  날짜를  표현할때  표현  방법이다
                      AMERIC  방식은    금액은    "$"  날짜는  DD-MON-YY    형식이고
                    한글  방식은  :금액은"//"  (원)  표시  날짜는  YYYY-MM-DD  형식으로  보여준다
NLS_CHARACTERSET  :데이블명  컬럼명을  한글로  사용할수있다      컬럼의  데이터는  정의  된  값과  상관없이  
한글입력이  가능하다    '

Client    언어  설정  
Unix
%vi    .cshrc
...........

setenv  nls_lang  korea_korea.ko16ksc5601

..........

:wq!

%  source  .cshrc
  


Windows  
실행->regedit->LOCAL_MACHINE->SOFTWARE-ORACLE  선택  한  내용이다
가능하면  한국에서  는  아래처럼  CLIENT  설정은  변경하지  않는다
일반적으로  서버의  설정을  변경한다
아니면  프로그램에서  변경처리한다  
  public  static      String  toKorean(String  str)  {
            String  convStr  =  null;
            try  {
                    if(str  ==  null)
                            return  "";

                        //  현재문자열을  8859_1형식으로  읽어내어  KSC5601형식으로  변환
                    convStr  =  new  String(str.getBytes("8859_1"),"KSC5601");
            }  catch  (UnsupportedEncodingException  e)  {
            }
            return  convStr;
    }

  

2551 view

4.0 stars