[root@linux root]# createdb --help
createdb creates a PostgreSQL database.
Usage:
createdb [OPTION]... [DBNAME] [DESCRIPTION]
Options:
-D, --location=PATH alternative place to store the database
-E, --encoding=ENCODING encoding for the database
-O, --owner=OWNER database user to own the new database
-T, --template=TEMPLATE template database to copy
-e, --echo show the commands being sent to the server
-q, --quiet don't write any messages
--help show this help, then exit
--version output version information, then exit
Connection options:
-h, --host=HOSTNAME database server host or socket directory
-p, --port=PORT database server port
-U, --username=USERNAME user name to connect as
-W, --password prompt for password
By default, a database with the same name as the current user is created.
Report bugs to <pgsql-bugs@postgresql.org>.
잘 보시라. DB마다 인코딩을 다르게 설정할 수 있다.
[root@linux root]# createdb -E UNICODE root
CREATE DATABASE
[root@linux root]# psql
Welcome to psql 7.4.1, the PostgreSQL interactive terminal.
Type: \copyright for distribution terms
\h for help with SQL commands
\? for help on internal slash commands
\g or terminate with semicolon to execute query
\q to quit
root=# SHOW server_encoding ;
server_encoding
-----------------
UNICODE
(1 row)
유니코드로 DB가 만들어졌다.
클라이언트 인코딩
그렇다면 인코딩 컨버전은 언제 일어나는가?
UNICODE로 생성된 DB는 UNICODE로 데이터를 입력해줘야만 한다. (적어도 다른 DBMS에서는 그럴 것이다.) 하지만 대부분의 경우에서 pgsql은 그럴 필요가 없다.
root=# SHOW server_encoding ;
server_encoding
-----------------
UNICODE
(1 row)
root=# SHOW client_encoding ;
client_encoding
-----------------
UNICODE
(1 row)
보통 일반적인 상태로는 이렇다. 하지만 psql이나 다른 인터페이스(가령 웹)에서 uhc나 euc_kr 을 이용해 접근하려 한다면.
root=# SET client_encoding='uhc';
SET
root=# SHOW client_encoding ;
client_encoding
-----------------
uhc
(1 row)
이제 데이터를 입력해보자. uhc 인코딩의 데이터가 자연스럽게 UNICODE로 저장된다. 이것이 pgsql의 고유하면서 뛰어난 기능이다.
참고로 필자는 postgresql.conf 에 아예 client_encoding = uhc 로 해놓고 있다. psql, 웹을 포함한 모든 인터페이스에서 uhc로 입력하고 모든 DB는 UNICODE로 저장되고 있다. utf_encode, decode 이런 함수를 써본지 너무 오래 되었다.
클라이언트 인코딩을 바꾸는 방법은 2가지이다.
root=# \encoding
UNICODE
root=# \encoding uhc
root=# \encoding
UHC
root=# SET client_encoding='uhc';
SET
인코딩 제약
"아햏햏" 이라는 단어는 uhc와 UNICODE에서는 유효하다. 하지만 euc_kr에서는 유효하지 않다. pgsql에 euc_kr로 DB를 생성하고 "아햏햏" 이라는 단어를 입력하면 올바르지 않은 캐릭터라는 에러만 밷어 낸다. 언어 선택을 잘 해야 한다. UNICODE가 대세다. 그리고 대부분의 언어가 UNICODE와는 상호 컨버전 되고 있다.
인코딩 변환 표
모든 인코딩이 서로 변환되는 것은 아니다. 대부분 UNICODE와는 상호 변환 되지만 euc_kr과 uhc는 서로 호환되지 않는다.
|| Server Character Set || Available Client Character Sets ||
Contents
인코딩
서버 인코딩
클라이언트 인코딩
인코딩 제약
인코딩 변환 표
참고 자료
libpq 인터페이스
PostgreSQL 매뉴얼
Recent Posts
Archive Posts
Tags