개발2014. 3. 1. 20:01

프로그래밍을 하다보면 캐릭터셋때문에 고생하는 경우가 종종생긴다.

이전에 하던 유지보수때도 그랬고..금요일에 다른 직원 잠깐 도와줄때도 그랬다.

금요일에 겪은 현상은..데이터 베이스에 문자열이 깨져서 저장이 되어 있는상황.

이 문자열을 원래 프로그래밍 한곳에서 쿼리를 날리면 제대로 나오고 우리가 쿼리를 하면 제대로 나오지 않는상황.

처음에는 이 문자열이 암호화 되어서 들어가서 그런건가 싶어서 문자열을 그대로 가져와 복호화도 해보고..

mysql에서 쿼리문 자체에서 복호화 하는 방법으로 해봐도 문자열이 제대로 나오지 않는 현상..

일단 암호화 돼서 저장되던 데이터는 쿼리문을 이용하고 데이터 불러올때 캐릭터셋 설정으로 해결을 해지만 다른 컬럼들이 문제였다. 그래서 데이터 베이스의 캐릭터 셋이 뭐로 설정 되어 있는지를 확인했고, 데이터를 넣을때(PHP나 JSP페이지)의 케릭터셋을 알아봤다.

데이터 베이스의 캐릭터 셋은 latin1..페이지의 케릭터 셋은 EUC-KR..

처음엔 데이터베이스 캐릭터 셋을 왜 latin1으로 설정했나 하고 검색해봤다.

한국에 살고 있는데 왠 latin1일까..난 라틴 사람도 아닌데??

ISO-8859-1가 latin1의 캐릭터셋..ㅋ

집어 넣을때 EUC-KR로 넣으니 latin1인 데이터 베이스에서는 데이터가 깨져서 들어갔을것이다.

왜냐..캐릭터 셋이 맞지 않으니까..아마도 데이터 베이스에서 깨져 보이지 않으려면 ISO-8859-1로 인코딩을 해서 넣으면 데이터 베이스에는 깨져 들어가지 않겠지..

일단은 우리가 설정 되어 있는 상황에서 깨지지 않는 데이터를 가져오는게 우선..

데이터 베이스에서 가져올때 ISO-8859-1로 데이터를 가져오고 그뒤 그 데이터를 EUC-KR로 인코딩 하는 방법으로 문제 해결..

직원과 함께 와 이렇게 왜 혼란스럽게 짰을까 하고 욕을했다.

아마도 이렇게 짜놓으면 뭐 회사에서 짤리지 않나??

보통 데이터 베이스와 페이지 인코딩 셋은 UTF-8이 일반적일텐데..

Posted by Z700zZz