PostgreSQLで「ORDER BY」に日本語項目を指定しソートした結果、あからさまに順番がおかしい・・・って感じたことありませんか?
以前Fedora Core(以後FC)3で始めてインストールした際に、どこかで見つけた方法を採っていましたがFC5になったころからそれが効かなくなってしまいました。色々調べてみましたが、ヒットしません(~~)
そんな感じで試行錯誤で対処してみました。
1.とにかくデータのバックアップ。
phpPgAdminやコマンドラインで一括取得してしまいましょう。
2.postgresユーザーで、ホームディレクトリに移動します。
FCのデフォルトは/var/lib/pgsql です。
3.次のコマンドを入力します。
・
・
・
LC_COLLATE: ja_JP.UTF-8
LC_CTYPE: ja_JP.UTF-8
(↑一番最後)
4.うまく行かない場合を考えて、/var/lib/pgsql/data ディレクトリを変名して置きます。
dataディレクトリを変名すれば、再創成した後も、フォルダ名を入れ替えるだけで元に戻せますので、
実験するときは、とにかくバックアップ残しておきましょう。
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.一旦起動してから、再度次のコマンドを打ってみます。
・
・
・
LC_COLLATE: ja_JP.EUC-JP
LC_CTYPE: ja_JP.EUC-JP
(↑一番最後)
この状態で ORDER BY 付きで検索した際に正しい順序でソートされたことを確認。以上で完了。
※WordPressの調整でinitdbのパラメータが一部省略されていました。ごめんなさい(~~)ペコ
(修正 2007/8/28)
TrackBack URI : http://njcfactory.com/bbg/wp-trackback.php?p=94
Comments (0)