개발 Q&A

제목 도저히 해결을 하지 못해 올리게 되었습니다.
글쓴이 정수리 작성시각 2016/10/20 09:33:43
댓글 : 5 추천 : 0 스크랩 : 0 조회수 : 12838   RSS

이전에 언어셋 문제로 인해 글을 올렸는데 스스로 해결해 보라는 답변이 와서

 

계속 혼자 몇일 째 끙끙대면서 해결해볼려고 해도 도저치 문제가 해결이 되지 않아 다시 올리게 되었습니다.

 

아직 제가 언어설정에 대한 개념이 안잡힌건지도 모르겠네요  

 

검색기능을 구현중에 있습니다. 한글 데이터를 넣고 검색 버튼을 누르면 엉뚱한 값들이 튀어 나와서 문제 입니다 

 

이 검색기능과 관련된 php들의 언어셋은 utf8 

 

회사내부 서버의 언어셋 utf8 

 

mysql의 언어셋의 경우 그림과 같이 euc-kr로 되어 있습니다. 

 

그렇기에 utf8인 한글데이터를 DB에 저장한 후 콘솔로 확인하면 데이터가 깨져서출력이 됩니다. 

 

DB에서 데이터를 가져와 웹에서 출력했을 때도 데이터가 깨져서 iconv를 통해 utf-8로 변경하여 출력합니다. 

 

궁금한것은 utf8인 한글데이터가 언어셋이 euckr인 mysql에 저장되면 언어셋이 변경이되나요?? 

 

phpshcool에서 질문을 올렸을때 답변으로 변경되지 않는 다는 답변을 받은적이 있었는데 변경이 되지 않는다면 DB에서 데이터를 가져와

출력하였을 때 웹페이지의 언어셋 utf8이면 깨지지 않고 출력되어야 하지 않나요?? 

 

막상 DB에서 가져온데이터를 iconv를 통해 utf-8로 변경하여 출력하고 있는데 이것으로 보아 DB에서 저장될때는 해당 DB의 언어셋에 맞

 

게데이터가 저장이 되는것 같은데... 아이러니하게 그렇다면 DB의 언어셋에 맞게 euc-kr로 변경이 되면 콘솔에서도 출력이 되어야 하는

데... 이부분도 이해되지 않네요;; 

 

검색 쿼리를 날리기 전에 set names euckr, set names utf8, set session character_set_connection=euckr; set

session character_set_results=euckr, set session character_set_client=euckr 라는 쿼리를 사용한 후 검색 쿼리를 사용하면 똑같이 엉뚱한

값이 출력이 됩니다. 

 

직접 콘솔창에 쿼리를 사용하면 결과값이 없다고 출력이 되어 쿼리 이전에 set names utf8를 입력하고 검색쿼리를 사용하니 결과값이 출

력이 됩니다;; 

 

하지만 웹에서 검색을 했을 때는 검색이 잘안되네요 ㅜㅜ 회사내부의 mysql의 언어셋 변경이 불가능 하며 프로젝트의 언어셋의 경우 utf8

로 만들어야 합니다. 어떻게 해야 정상적으로 검색기능을 구현할수 있을까요?? 

 

제가 언어셋 설정에 대해 잘못 알고 있는 것일까요? 

 

*phpscholl에서 언어셋에 대한 문제에 대한  답변으로 테이블의 언어셋을 변경하라는 답변이 있어 테스트 겸  테스트테이블을 만들고 새

로운 php페이지(언어셋 utf8)를 만들어 테스트를 해봐도 검색이 제대로 이루지지 않았습니다.

 다음글 이메일 전송 첨부파일 다운로드 기능. (3)
 이전글 dbforge 사용 중 에러.. (1)

댓글

Bill / 2016/10/20 14:37:35 / 추천 0

아주아주 짧은 견해이지만 언어셋으로 매번 한 번 쯤은 고생을 하는 편인 초보개발자입니다.

제가 그동안 삽질 하면서 깨달은 점들은..

콘솔에서 DB를 조회할때, 조회 결과를 표현할 언어셋도 따로 지정이 되어있었습니다. phpmyadmin에서는 제대로 나오던것이 콘솔로 조회하면 깨져서 나온다거나 제대로 안 나오는 경우가 있었구요,

insert 또한 콘솔로 입력했을 땐 한글이 깨져서 들어가는 경우가 잦았으나 phpmyadmin과 같은 방법으로 insert하면 잘 되는 경우가 있었습니다.

콘솔에서 입력, 조회할 때의 언어셋도 확인해 보시는 것을 추천드립니다.

그리고 기본적인 것이지만 언어셋 변경 전에 생성된 DB,테이블은 언어셋 변경 적용이 되지 않는 것도 생각보다 많은 분이 모르시고 계시더군요. 아마 웹서버 셋팅에 언어셋 설정이 포함되어있으니 당연히 제일 처음 하다보니 생성 후 변경은 잘 하지 않으셔서 그런 것 같습니다.

 

똑 부러지는 해결책을 제시해드리기보단 서로의 경험을 공유하고자 댓글 남기고 갑니다^^

꼭 해결하시길  기원합니다.ㅎㅎ

정수리 / 2016/10/20 18:26:49 / 추천 0

@bill

답변감사합니다.

말씀하신 부분중에 insert, select를 할때의 언어셋을 설정하는것이 mysql에 따로 있다는 말씀이실까요?

아니면 insert, select시 데이터들의 언어셋을 확인하라는 말씀이실까요?

변종원(웅파) / 2016/10/21 09:55:53 / 추천 0
저장할때 euc_kr로 변환해서 저장하시는지?
정수리 / 2016/10/21 14:07:34 / 추천 0

@변종원

저장할때 euc-kr로 변환하지 않고 저장합니다;

변종원(웅파) / 2016/10/21 14:27:57 / 추천 1
db가 euc-kr이면 변환해서 넣어야죠. ^^;