본문 바로가기

DB (Mysql, Oracle, Maria, ...)

우리가 착각하고 있는 NLS_LANG - PHP에서 오라클 exp후, 한글이 ?로 나오는 경우

회사에서 이것때문에 정말 고생했던 정보입니다.^^

[문제점]
서버 이동 후, 웹페이지에서 한글이 깨지고, OCI 연결 옵션에서 인코딩을 넣어주면, 정상으로 나올 경우
* 단, 이 방법은 DB에는 정상적인 인코딩으로 데이터가 들어가 있는 경우이다. 데이터가 깨져서 IMP 를 한 경우에는, 
  DB 언어를 재 설정 혹은, 데이터 변환이 필요하다. 

[원인]
이는 DB에는 정상적으로 데이터가 import되었지만, NLS_LANG이 US7ASCII 혹은 NULL 값으로 되어있는 경우
한글을 읽을 수 없기 때문이다. (자세한 내용은 아래의 참조 사이트들을 참조하라. 노력하지 않는자 쓸모없다.ㅋㅋ)

[해결]
1. 아파치 stop

2. 시스템에 NLS_LANG 설정 
export NLS_LANG=KOREAN_KOREA.KO16MSWIN949
=> /etc/profile 에 위의 내용을 추가하면 자동으로 적용 시킬수 있다.

3. 아파치 재실행

여기서 제일 중요한 내용은 
아파치를 실행하는 user의 NLS_LANG 값을 지정해줘야된다는 것이다.

그 이유는 NLS_LANG이 적용되는 순서가 
SESSION > CLIENT > SERVER 
이기 때문이다.



[참조사이트들]
http://www.oracle.com/technology/global/kr/pub/columns/oracle_lns_1.html