개발자의 팩션골드의 지식베이스 입니다.

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

[문제점]
서버 이동 후, 웹페이지에서 한글이 깨지고, 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

Comment +0

 //배열의 열과 행을 바꿔주는 함수
 function array_change_row($arr,$flag=NULL)
 {
  unset($temp_arr);
  foreach ($arr as $key => $val)
  {
   if($flag) foreach ($val as $sub_key => $sub_val) $temp_arr[$sub_key][]=$sub_val;
   else foreach ($val as $sub_key => $sub_val) $temp_arr[$sub_key][$key]=$sub_val;
  }
  return $temp_arr;
 }

Comment +0

//중복삭제하고, 배열 합치기
 function array_remake($item, $key)
 {
  global $remake_item,$remake_key;

  if($remake_key) $remake_key.="^";
  $remake_key.=$key;
 
  for($i=0;$i<count($item);$i++)
  {
   if($remake_item[$i]) $remake_item[$i].="^";
   $remake_item[$i].=$item[$i];
  }
 }

 function array_merge_unique($array1, $array2)
 {
  global $remake_item,$remake_key;

  array_walk(array_merge_recursive($array1,$array2), 'array_remake');
  $remake_item=array_reverse(array_unique($remake_item));
  $remake_key_array=explode("^",$remake_key);

  while($temp_item=array_pop($remake_item))
  {   
   $item=explode("^",$temp_item);
   for($i=0;$i<count($remake_key_array);$i++)
   {  
    $return_unique_array[$remake_key_array[$i]][]=$item[$i];
   }
  }
  $remake_item=null;
  $remake_key=null;
  return $return_unique_array;  
 }
 
 사용법
$merge_array=array_merge_unique($array1, $array2);


Comment +0