AccessとLinux

中小企業での販売管理プログラムの作成についての所感

PostgreSQLをUTF-8へ

2013年02月23日 08時44分31秒 | Weblog
営業が使っているパソコンの調子が悪く、何台か更新した。OS無しパソコンの購入を基本にしてきたが、WindowsXPの既定のブラウザIE Ver.6では開けないホームページもあったりで、Windows7パソコンを購入した。
Office2007はXPでも7でも稼働するので、どちらを使っても全く問題がないのだが、しばらくすると、営業からクレームが。
「『m3』が入力できない!」「『筆記体のリットル』が入力できない!」
仕事柄、m3とリットルはよく使う。今まで、半角でm3、L(小文字のLは数字の1と紛らわしいので大文字を使っていた)を使っていたし、全角1文字のm3や『筆記体のリットル』は通常、文字パレットから呼び出してこなければならなかったので、敢えて使う人がいなかった。
それが、ほとんどパソコンの知識のない営業マンから、「『筆記体のリットル』が入力できない!」というクレームがあったので驚いた。調べてみると、Windows7では「りっとる」で変換すると、機種依存文字の『筆記体のリットル』が表示される。これなら、機種依存文字を使ってしまう。「りゅうべ」も同様、全角1文字のm3が表示される。

現在、PostgreSQLはエンコーディングをEUC_JPで運用しているので、機種依存文字を登録しようとすると、エンディングエラーになってしまう。1年前も検討したエンコーディングUTF-8に移行することにした。

以下、その手順。ちなみに、PostgreSQL9.1.2インストール時の設定は

$ configure
$ initdb --encoding=EUC_JP --no-locale

「エンコーディングEUC_JP、ロケールC」となっている。

まず、ダンプデータを作成する。

$ pg_dump DatabaseName --encoding=UTF-8 > HozonMei

使っているデータベースをドロップする前に、セッションを全て切ってしまうために、一度、強制的にpostmasterを止める。

$ pg_ctl -m f stop

LANケーブルを抜いてしまう。
旧データベースをドロップする。

$ dropdb DatabaseName

エンコーディングUTF-8のデータベースを作成する。

$ pg_ctl start
$ createdb DatabaseName -E UTF-8 --locale=ja_JP.UTF-8 -T template0

(「-T template0」を指定しないと、createdb できなかった。)

$ psql DatabaseName -e < HozonMei

下記で確認。

$ psql -l

LANケーブルをつないで、終了。
これで、機種依存文字も登録できるようになった。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
エンコーディングUTF-8で作成したデータベースは、ダンプデータを作成する時に特に--encoding=UTF-8を指定しなくてもUTF-8でダンプできるみたいだ。UTF-8でダンプしたデータはEUC_JPより大きくなるので、UTF-8に移行後、ダンプデータの大きさを比べてみると、--encoding=UTF-8を指定しなくてもダンプデータは移行前のEUC_JPのダンプデータより大きかったのでそう判断した

今後はUTF-8で運用していくので、次回サーバー更新時には下記で、initdbする。

$ initdb --encoding=UTF-8 --locale=ja_JP.UTF-8

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
とりあえず、自宅でデータベースを更新する時は、

createdb DATABESE_MEI -E UTF-8 -l ja_JP.UTF-8 -T template0

とやっている。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする