Google
 
PostgreSQL
たぶねこ @ 2007年5月12日 8:50 PM

PostgreSQLで「ORDER BY」に日本語項目を指定しソートした結果、あからさまに順番がおかしい・・・って感じたことありませんか?
以前Fedora Core(以後FC)3で始めてインストールした際に、どこかで見つけた方法を採っていましたがFC5になったころからそれが効かなくなってしまいました。色々調べてみましたが、ヒットしません(~~)
そんな感じで試行錯誤で対処してみました。

1.とにかくデータのバックアップ。
  phpPgAdminやコマンドラインで一括取得してしまいましょう。

2.postgresユーザーで、ホームディレクトリに移動します。
  FCのデフォルトは/var/lib/pgsql です。

3.次のコマンドを入力します。

#pg_controldata data



LC_COLLATE: ja_JP.UTF-8
LC_CTYPE: ja_JP.UTF-8
(↑一番最後)

4.うまく行かない場合を考えて、/var/lib/pgsql/data ディレクトリを変名して置きます。
  dataディレクトリを変名すれば、再創成した後も、フォルダ名を入れ替えるだけで元に戻せますので、
  実験するときは、とにかくバックアップ残しておきましょう。

以前FC4のころは、標準がEUC-JPであったらしく、
DBの初期化は以下の通りで可能でした。

#initdb -E EUC-JP --no-locale -D /var/lib/pgsql/data

ところが、FC5・6の標準インストールでは、ロケールが、UTF-8となっているため、
EUC-JPでテーブルを作成する場合には、ロケールの変更が必要になります。
それを踏まえて、以下のコマンドでDBを初期化します。

#initdb -E EUC-JP --locale=ja_JP.EUC-JP -D /var/lib/pgsql/data

5.一旦起動してから、再度次のコマンドを打ってみます。

#pg_controldata data



LC_COLLATE: ja_JP.EUC-JP
LC_CTYPE: ja_JP.EUC-JP
(↑一番最後)

この状態で ORDER BY 付きで検索した際に正しい順序でソートされたことを確認。以上で完了。

※WordPressの調整でinitdbのパラメータが一部省略されていました。ごめんなさい(~~)ペコ
 (修正 2007/8/28)

コメントはまだありません »

コメントはまだありません。

この投稿へのコメントの RSS フィード。 TrackBack URI

コメントする

*

Copyright (c) 2007 njcFactory All rights reserved.
HTML convert time: 0.266 sec
Images is enhanced with WordPress Lightbox JS by Zeo
Powered by WordPress.