2012年4月16日月曜日

PostgreSQLのinitdbと違うロケールでDB作成

Ubuntu上にPostgreSQLをインストールして、
phpPgAdminでログインして、EUC-JPでDBを作成しようとしたら、
ERROR: encoding EUC_JP does not match locale ja_JP.UTF-8

と言われた。
SQL文はこんな感じ。
CREATE DATABASE "example" WITH TEMPLATE="template1" ENCODING='EUC_JP'
古いDBをテストするために、EUC-JPでDBを作成する必要がある。
どうやら、initdbの文字コードと違う文字コードでDB作成できないらしい。検索してみると、結構な書き込みを見つけたので、かなりFAQな問題らしい。

ただし、initdbからやり直すという面倒な方法しか見つからない。

色々探して、initdbの文字コードと違う文字コードでDB作成を見つけて
簡単な解決をやっと発見。

要するに、
CREATE DATABASE "example" WITH
TEMPLATE="template0" ENCODING='EUC_JP'
LC_COLLATE='C' LC_CTYPE='C';
とSQLを発行することで解決した。

ポイントは
1)template0を使うこと。
2)LC_CTYPEをCで指定すること。
の2つだけ。
これでUTF-8でinitdbしていてもEUC-JPでDBが作成できる。

◆ただし、もう一つ、この作業の前に行ったことがある。

先に、こんなページを見つけていた。
PostgreSQL 9.1 installation and database encoding

つまり、OSでサポートされるロケールでなければいけないらしい。

Ubuntuでja_JP.EUC-JPを使用するを参考に調べたところ、
今のUbuntuにはEUC-JPが入っていなかった。

そこで、ja_JP.EUC-JPというロケールをOSにインストールしてから
上記のCREATE DATABASEコマンドを発行している。

どんな順序で動くかはテストしてないので、メモということで。



0 件のコメント: