玉木の暇つぶし

更新不定期の暇つぶし
某岡田君と更新回数の少なさを競うブログ

PostgreSQLのロケールとエンコーディング

2007-08-05 23:55:38 | 備忘録

 備忘録です

 PostgreSLQにおいて日本語を扱う場合にはエンコーディングだけではなくロケールも正しく扱う必要がある。

 ロケールが正しくないと、日本語文字列に対する=演算子や並び替えにおいて正しい結果が得られなくなる。
 たとえばwhere句で=演算子を使用して日本語の条件を指定しても、 予想通りの結果が得られなくなる(全件が検索結果として帰ってくる等)。

 これは=演算子などはロケールを考慮するため、ロケールが正しくないと、比較も当然正しく行われない。 (ただlike演算子はロケールを無視する)

 PostgreSQLのロケールはデータベースシステム全体で共有され、pg_catalogテーブルや、 pg_controldataコマンドで確認することができる。またロケールはinitdbコマンドを利用して変更することができる。

 結論:PostgreSQLではロケールは使用しない(no_locale)ほうが無難

 参考資料:

  http://postgresql.jp/ (日本PostgreSQLユーザー会内の各バージョンのマニュアル、 項目「多言語対応」)
  http://ml.postgresql.jp/pipermail/pgsql-jp/ (メーリングリストの書庫内に類似の質問多数あり)


最新の画像もっと見る