2010年7月13日火曜日

デフォルトencodeと違う文字コードでDB作成

CentOS5.4にPostgreSQL8.4を構築する機会があり、initdbでencodingをEUC_JPにして構築していた。Redmineを同データベースで運用するため今まで通りデータベース作成コマンドを実行したらエラーが出た。いつもなら大丈夫なのに・・・8.4から仕様が変わったみたい。

$ createdb redmine --owner redmine --encoding=UNICODE
createdb: database creation failed: ERROR:  new encoding (UTF8) is incompatible with the encoding of the template database (EUC_JP)
HINT:  Use the same encoding as in the template database, or use template0 as template.

UTF8はテンプレートと互換性がない
ヒント:同じ文字コードにするかテンプレートとしてテンプレート0を使用してください。

と表示された。initdbと異なる値でcreatedbするときは個別にオプション指定しないとダメみたいです。なので以下のようにクリアなテンプレート0データベースを使い解決。
$ createdb redmine --owner redmine --encoding=UNICODE --template=template0

また8.4からデータベースごとにロケールも持てるようになったようです。
こちらに詳しく解説がされています。

※リンク先の「Let's Postgres」ですが非常に優しく書かれていてわかりやすいと思います。今年で開設3年目ということなのでこれから期待できそうですね。

1 件のコメント:

匿名 さんのコメント...

この記事内容を探していました。
とても助かりましたm(_ _)m

Google検索