環境
- CentOS release 6.6 (Final)
- postgresql93.x86_64 9.3.25-1PGDG.rhel6 @pgdg93
事象
PostgreSQLで、以下の様にエンコーディング「EUC_JP」でCREATE DATABASEしようとした。
# create database でーたべーす名 ENCODING='EUC_JP' LC_COLLATE='C' LC_CTYPE='C';
すると、以下のエラーメッセージが出力され、CREATE DATABASEできない。
ERROR: new encoding (EUC_JP) is incompatible with the encoding of the template database (UTF8)
HINT: Use the same encoding as in the template database, or use template0 as template.
原因
このマシンの DB のディフォルトの文字コードは UTF-8 なんだから、EUC-JP で新しい DB 作ろうとしても駄目やでぇってこと。
違う文字コードでDB作る時は、template0をテンプレートに指定しようぜいやあ、ついつい忘れてしまうんで、今回はブログに書いておこう。(PostgreSQL 使いとしては今更なネタだけど(^^;)さっき、うちのテスト用のマシン(FreeBSD 8.1-RELEASE on ASUS EeePC 4G-X(笑))...
エラーメッセージに HINT として示されているように、template0 を使えば良いわけね。
template0 は、文字コードの情報を持っていない、本当にピュアな DB なので、他の文字コードの DB の元ネタになるってわけだね。
てことかぁ。ありがとうございます。
対処
オプション「WITH TEMPLATE=’template0’」をつければ良い。
CREATE DATABASE "データベース名" WITH TEMPLATE="template0" ENCODING='EUC_JP' LC_COLLATE='C' LC_CTYPE='C';
あざした!
コメント