プログラマ ずんべ の日記

zunbe

プログラマ ずんべ の日記
プログラマ ずんべ の日記

探し物は見つかりましたか? サイト内検索を試してください。

オールスポーツ コミュニティ オールスポーツ コミュニティ カロリーオンのお茶 カロリーオンのお茶

2006/11/11

【ソフトウェア】UNICODEで大ハマリ

PostgreSQLを使用したデータベースで、7.2.3 で稼動しているシステムを 7.4.3 にアップグレードする事になった。
このシステムは、日本語、英語、中国語、各語混在の4種類のデータベースが動作しており、それらをすべてアップグレードする必要がある。
各データベースは、どれも姑息な構成にはなっていないので、7.2.3 で pg_dump し、7.4.3 で psql を使ってリストアすればいい。

…はずだったのだが、うまくいかない。
日本語、英語は EUC_JP、中国語はEUC_CN でデータベースが生成してあるのだが、これらについては問題なくリストアができた。
各語混在はUNICODEでデータベースを生成してあるのだが、なぜかうまくいかない。
こんな現象が発生する。

たとえば、以下のようなテーブルがあったとして…。

-----
CREATE TABLE HOGE
(
  VALUE TEXT PRIMARY KEY
);
-----

このように INSERT してみる。

-----
INSERT INTO HOGE VALUES ('あいうえお');
INSERT INTO HOGE VALUES ('かきくけこ');
-----

すると、こんなエラーが発生する。
# 実際に、この文字列の INSERT でエラーが発生するということではない。
# こういう現象が発生するという意味。

-----
ERROR: duplicate key violates unique constraint "value_pkey"
-----

VALUE列に同じ文字列を挿入するなら、もちろん、このエラーが発生するが、上記データで発生するわけがない。
なぜだ?

ググってみる。
あった。

 PostgreSQL7.3インストール編

「UNICODEでのみ問題が出る」という記載ではないが、日本語を正しく処理させるためには、ロケールの設定をオフにしないといけないようだが、7.3 以降はデフォルトでオンになっているらしい。
initdb --no-locale してから、同様の操作を行ってみると、エラーも出ずにすんなり INSERT する事ができた。
う~ん、こんな落とし穴があったとは…。




このエピソードはいかがでしたか?

投稿者 zunbe : 2006/11/11 00:09:41


トラックバック 〔http://blog.zunbe.com/mt/mt-tb.cgi/505〕

コメント

コメントしてください






保存しますか?


スパム対策:
この入力フィールドに「603」と入力してください。


プログラマ ずんべ の日記:ずばヒット アマゾン