PostgreSQLで、CREATE DATABASEの際にERROR: new encoding (EUC_JP) is incompatible with the encoding of the template database (UTF8)

PostgreSQL
スポンサーリンク

環境

  • 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';

参考

あざした!

 

コメント