CI 묻고 답하기

제목 오라클 DB 데이터 한글출력(캐릭터셋)에 관한 질문입니다.
카테고리 CI 2, 3
글쓴이 갈대풀 작성시각 2019/07/09 17:59:01
댓글 : 3 추천 : 0 스크랩 : 0 조회수 : 12995   RSS

안녕하세요. 개발 1년차 신입 개발자 입니다.

질문내용을 말씀드리자면 2일전 갑자기 개발서버(리눅스)가 다운돼서 재부팅을 한 후로

무슨원인인지는 모르겠지만 갑자기 개발서버에서 오라클을 사용하는 프로젝트들의 한글이 깨져서 웹에 보여집니다.

print_r로 쿼리문을 출력하면 한글이 ??? 이런식으로 깨져서 나옵니다. 웹에서 텍스트로 표시한 한글은 정상적으로 잘 표시됩니다.

오직 DB에서 출력한 데이터들만 한글이 깨져서 출력됩니다. DB안의 데이터들은 한글로 저장 잘 되어있고

DB 캐릭터셋을 확인하니 KOREAN_KOREA.KO16MSWIN949로 나옵니다. 로컬 및 운영서버는 한글이 잘 표시되고

DB 캐릭터셋은 운영서버와 동일합니다. 코드들도 같습니다.

우선 확인한 정보로는...

 

웹에서의 메타캐릭터셋 설정 : UTF-8

리눅스에서의 파일 인코딩 : UTF-8

웹에서 쿼리돌린 후 나온 데이터 : UTF-8

아파치 설정 : UTF-8

리눅스 설정에서의 캐릭터셋 : UTF-8

오라클 DB 캐릭터셋 : KO16MSWIN949 

 

로 되어있고 분명 DB 설정을 변경한 일은 없었습니다. profile과 .bash_profile에서의 LANG 설정과 리눅스의 파일인코딩 부터

아파치 캐릭터셋까지도 확인했습니다. 한글이 잘나오다 갑자기 깨지니까 원인찾기가 너무 힘이드네요..

여러 테스트 결과 CI에서 DB를 접속하기 전 putenv("NLS_LANG=KOREAN_KOREA.KO16MSWIN949"); 이런식으로

환경변수를 서버안 oci8_driver.php 의 db_connect() 하는부분에 넣어주니 한글은 나오지만 근본적인 원인은 아닌 것 같습니다.

그 이유가 서로 다른 개발 프로젝트들의 DB를 한개의 DB(테스트)로 쓰고있는데 어떤 프로젝트에서는 한글이 다 나오지만

다른 프로젝트에서는 또 깨지는 부분이 있습니다. 또한 기존에 이니시스 결제 및 배송정보를 전송하는 부분에 있어서도

원래는 한글이 깨지지 않았었는데 지금은 putenv로 한글을 임시방편으로 나오게 하더라도 깨져서 전송해버립니다.

혹시 CI의 database.php에서의 캐릭터셋 설정에 KO16MSWIN949식으로의 표현법이 따로 있을까요..?

2일동안 구글링하며 수십차례 테스트하며 이리저리 원인을 파악하려고 했지만 도저히 답이 보이지 않아서

CI 게시판에 글을 써봅니다. ㅜㅜ 선배님들의 조언을 기다리겠습니다.

감사합니다.

 

 다음글 ci 3.x 버전에서 hook에서 컨트롤러 요청전에 세... (2)
 이전글 3.1.x대 사용중인데, namespace 사용이 가능... (3)

댓글

엽토군 / 2019/07/10 22:09:11 / 추천 0
모르는 사이에 뭐가 업데이트/업그레이드 됐을수 있을것 같은데.. 잘은 모르겠네요.
변종원(웅파) / 2019/07/11 08:28:26 / 추천 0

재부팅후라면 set 명령으로 1회성 선언했을 수도 있습니다.

오라클 자체 설정에 넣어주거나 글 써주신대로 처리할 수밖에 없습니다.

mysql은 connect후에 선언해도 되서 hook으로 한번 선언해주면 되는데 오라클은 connect전에 선언해야하네요.

갈대풀 / 2019/07/12 15:07:39 / 추천 0

아... 엽토님 웅파님 답변 감사드립니다.

일단 우선 기존의 처리방식대로 해당 오라클 커넥션하기전에 전부 따로 환경변수를 주는걸로 처리는 해놨는데..

웅파님 말씀대로 혹시나 1회성 선언한 부분이 있는지 부터 찾아봐야겠습니다.

두분의 답변 감사드립니다.