역시 메뉴얼을 잘 읽어야한다는 생각을 다시 한번 합니다.
개념은 이렇습니다.
DB 차원의 자료는 utf-8로 저장되고,
client 차원의 자료 입출력은 uhc로 하고,
이것이 단지 세션 환경변수 값으로 가능하군요.
그 나머지 변환은 서버가 알아서 해 줍니다.
그 방법은
psql 로 예를 들면, mydb=# create table t (a text);
CREATE TABLE
Time: 40.361 ms
mydb=# insert into t values ('아햏햏');
ERROR: invalid byte sequence for encoding "EUC_KR": 0xc164
mydb=# create database mydb2 encoding = 'utf8';
CREATE DATABASE
Time: 127.638 ms
mydb=# \c mydb2
You are now connected to database "mydb2".
mydb2=# show server_encoding;
server_encoding
-----------------
UNICODE
(1 row)
Time: 2.139 ms
mydb2=# show client_encoding;
client_encoding
-----------------
UNICODE
(1 row)
Time: 0.868 ms
mydb2=# set client_encoding = 'uhc';
SET
Time: 4.142 ms
mydb2=# create table t (a text);
CREATE TABLE
Time: 47.882 ms
mydb2=# insert into t values ('아햏햏');
INSERT 20896 1
Time: 3.751 ms
mydb2=# select * from t;
a
--------
아햏햏
(1 row)
Time: 1.683 ms
핵심은 set client_encoding 이었습니다.
php일 경우라면, db 연결을 한 다음 바로 다음에 set 명령으로 client_encoding 값만 지정해 준다면 어떠한 코드 수정 없이 바로 사용할 수 있겠네요. 그리고, DB 차원의 모든 자료는 unicode로 바꾸고.
답을 찾았습니다. 이제 euc-kr 놈을 포기할 수 있을 것같습니다.
(odbc 에서는 잘 될지 모르겠습니다. 아직 안해봤지만)
큰 문제 하나를 풀었네요. 기분 끝내줍니다. :)
사용해 보시고, 문제점이 발생하면 알려주세요.
자료가 unicode로 간다면, 형태소 분석은 보다 편해집니다. unicode놈의 내부는 한글을 초,중,종성으로 분리해 낼 수 있거든요.
|