Skip to end of metadata
Go to start of metadata

 

현상


 PHP를 사용하는 web 페이지에서 한글 조회시 한글이 깨지는 경우는 있습니다. 

자주 발생하는 한글 깨짐 현상의 원인과 해결 방법에 대해서  알아봅니다.

PHP 실행구조


odbc driver manager 인  unixODBC  ( http://www.unixodbc.org/ )  와  ALTIBASE 가 제공하는 odbc driver를 사용하여   php 페이지에서  ODBC API를 통해  ALTIBASE HDB DB에  접근할 수 있습니다.

ALTIBASE 와 PHP 를 연동하는 방법에 대한 설명은 『 ALTIBASE PHP 연동가이드를  참고하시기 바랍니다.

주요 원인


한글이 깨지는 현상은  web 서버 설정,  php 설정,  unixODBC 설정등  다양한 부분에서의 설정 문제로 발생할 수 있으므로 먼저 unixODBC에서  한글을 포함하는 DB 결과가  정상적으로  출력되는 것을  먼저 확인해야 합니다. 

unixODBC에서 제공하는 $UNIXODBC_HOME/bin/isql  유틸리티를 사용하여  DB에 쿼리를 실행해서  한글을 포함한 쿼리 결과가 정상적으로 출력되는 지  확인 후  다음으로 php 설정을 확인합니다.

이 후 마지막 단계로  web 서버 설정이나 web page 설정을 확인해서 한글 관련한 character set 설정에 문제가 없는지 확인합니다.

 

ODBC 설정에서  NLS_USE 설정

unixODBC 설정인 odbc.ini  에  DB 에 connection 에 사용되는  client character set 을 지정하는  NLS_USE  설정이 있습니다.  이 설정값과  DB의 character set 설정이 맞지않는 경우  한글 출력에 문제가 있을 수 있습니다.

이 프라퍼티는   DB의 character set 과  동일한 값으로 설정해야 합니다.

odbc.ini 파일

odbc.ini파일에 설정된 내용

[Altiodbc]

    Driver = /home/omegaman/altibase_home/lib/libaltibase_odbc-64bit-ul64.so

    Description = altibase odbc

    User = SYS

    Password = MANAGER

    ServerType = altibase

    Server = 127.0.0.1

    User = SYS

    Port = 21038

    NLS_USE = MS949

    Database = mydb

    FetchBufferSize = 64

    ReadOnly = no

    TraceFile = /tmp/odbc.log

    Trace = 1

 

터미널창에서  한글 지원 코드 설정

DB에서 정상적으로 데이타를 가져왔음에도  이를 출력하는 터미널 창에서  한글 문자셋 출력을 지원하지 못할 경우 한글이 제대로 출력되지 못할 수 있습니다.

DB character set 이  UTF8 로  설정되어 있는 경우  window command 창에서도   유니코드를 보여줄 수 있도록   코드 페이지(chcp 명령)가   설정되어야 하며 그렇지 않을 경우 한글이 정상적으로 출력되지 않습니다.

 

window 에서 문자코드 변경예

 C:\Users\omegaman>isql -s 192.168.1.35 -port 20416

iSQL> set vertical on;

iSQL> select nls_use, nls_characterset from v$nls_parameters;

NLS_USE                            : US7ASCII

NLS_CHARACTERSET      : UTF8  

iSQL> exit;

C:\Users\Altibase>chcp 65001   <-- DB의 문자셋이 unicode인 UTF8 이므로  콘솔 문자도  유니코드(65001) 로 설정되어야 합니다.

Active code page: 65001

 

일반적으로 많이 사용하는 터미널  접속 프로그램 인  Secure CRT 와 같은 프로그램도  UTF8 인 한글 문자를 출력할 경우  session 설정중에 unicode   관련 설정이 맞게 설정되어 있어야 한글이 정상 출력됩니다.

 

PHP 설정에서 변수에 설정되는 최대 길이 설정

php 프로그램을 하는 경우 데이터가 큰 varchar 또는 clob 데이터가 깨지거나 같은 데이터가 반복적으로 나오는 경우가 있습니다.  만약 특정부분 부터 데이터 출력에 문제가 있다면 odbc 설정 부분을 살펴봐야 합니다. 

증상이 위와 같은 경우 php.ini에서 odbc.defaultlrl 값을 데이터가 모두 포함될 수 있도록 변경하여 줍니다. 

예를들어, 컬럼이 varchar(65536)일 경우 기본 설정 값 odbc.defaultlrl = 4096에 의해 데이터가 잘 못 출력 될 수 있습니다.

odbc.defaultlrl = 65536으로 변경하게 되면 64KByte까지는 정상적으로 데이터가 출력됨을 확인 할 수 있습니다.

 일반적으로 php.ini는 /etc 밑에 있으나, 이는 설정에 따라 달라 질 수 있습니다.

 

  • No labels