2010년 12월 25일 토요일

MySQL의 Procedure나 Function의 한글 깨짐 방지

MySQL 에서 Stored procedure나 function 을 작성하는 경우,
가끔 Procedure나 Function body 부분에 한글이나 일본어와 같은 문자를 사용해야 하는 경우가 있다.
하지만, 가끔 이러한 Procedure나 Function을 실행 해보면 글자가 깨어지는 경우를 자주 볼 수 있다.

이러한 부분의 원인은 Procedure나 Function이 만들어 질 때부터 글자가 깨어져서 만들어 지는 경우가 상당히 많다.
가끔 그냥 놓치는 경우가 많지만,
MySQL client에서 Procedure나 Function 을 만들기 전에 여러가지 character set을 설정한 후
생성하면 이러한 문제점을 해결할 수 있다.

일반적으로 MySQL client를 실행하고, character set들을 확인해보면 아래와 같이 Latin1으로 설정된 경우가 상당히 많다.

root@localhost:test>show variables like '%char%';
+--------------------------+---------+
| Variable_name            | Value   |
+--------------------------+---------+
| character_set_client     | latin1  |
| character_set_connection | latin1  |
| character_set_database   | utf8    |
| character_set_filesystem | binary  |
| character_set_results    | latin1  |
| character_set_server     | utf8    |
| character_set_system     | utf8    |
+--------------------------+---------+

지금과 같은 상태에서 Procedure나 Function을 생성하면 Body내의 한글이나 일본어가 깨어져서 생성되게 된다.
이런 경우에는 SET NAMES utf8; 명령으로 character_set_connection, _client, _results 을 변경하고 Procedure나 Function 을 생성해 주면 된다.


그리고, 가끔 이렇게 정상적으로 생성되어도 글자가 깨어지는 경우에는 아래와 같이 리턴값의 Character set을 지정해주는 것도 방법이다.

create function getString() returns varchar(20) CHARACTER SET UTF8

댓글 2개:

  1. 덕분에 캐릭터셋 맞춰서 프로시져 잘 작성하였습니다.!

    답글삭제
  2. 감사합니다. 덕분에 프로시져 call 할때 한글 데이터 깨지는 문제 해결 했습니다

    답글삭제