今さらEUC_JPって感じだけど
すでにサーバ環境がUTF-8をデフォルトとするようになって、随分経っているので必要となるケースは少ないんだけど、今回はハマりました。
通常であれば、UTF-8でDBを構築していけば、特に問題もなく引っかかるようなところは何もないのだけれど…。
サーバの移行のため、仕方なくEUC_JPを使うことに。
旧データベースは、プログラムもEUC_JPで構築されている。
プログラムの書き換えは動作検証に時間がかかるので、そのまま動かしたい。
まぁPostgreSQLは文字コードを選べるので、問題ないだろうと…。
サーバにPostgreSQLをインストール
これは問題なく、いつも通りapt-getで入れてオシマイ。
何も引っかかるところはありません。
ついでに、phppgadminも入れておく。
これで作業が簡単になる。
旧サーバにも入っているので、確認がしやすいですな。
若干、バージョンが異なっているので、その点だけ要注意と。
さてphppgadminを使ってDBをEUC_JPで作ろうとしたら、上手くいかない。
createdb: database creation failed: ERROR: encoding EUC_JP does not match locale en_US.UTF-8
見慣れぬエラーですね…。しかもDBは作成してくれない。
何か操作を間違えたのかと、見直すが、特に手順に問題はない。
「ERROR: encoding EUC_JP does not match locale en_US.UTF-8」でググってみると 、最初に答えが見つかった。
「
名称未設定:Ubuntu12.04LTSのPostgreSQLでEUC_JPのデータベースを作る」とまんま同じ内容だった。
これによると、
createdb -T template0 -E EUC_JP --locale=C dbname
と、localをCで作りなさいということらしい。
試しに、コンソールから試してみると、確かに文句も言われず作成してくれる。
phppgadminでもできるはず

この方法は、postgresユーザで作業するコンソール上のコマンドなので、phppgadmin上で異なるユーザで作成したい。
試してみるが、どこに設定すべきか分かりにくい。
何度か試してみると、図のようにすれば思うように作成できることがわかった。
Template→template0を選択(UTF-8の時はtemplate1)
エンコード→もちろんEUC_JP
CollectionとCharacterType→Cで設定
これでOKだった。
ここまでくれば、あとはdumpデータを突っ込んでやればOK。
と思ったら、「サーバが指定されていません」って…。見たことのあるメッセージや!
半年以上経つと、すっかり忘れて同じミスをしでかす。
だからこうやってブログにまとめておく必要があるんだなぁwww
ちゅうことで、php.iniを書き換えて解決とな。
コメント
コメントを投稿
励みになりますので、簡単で良いので一言くださいませ。