• 検索結果がありません。

2. プロセスとメモリー

3.8 ロケール指定

3.8.1 ロケールの指定とエンコーディング

ロケールを使用せず、エンコーディングのみ指定した場合、pg_database ビューの

encoding列は指定されますが、ロケール関連列(datcollate等)には「C」が出力されます。

例 75 ロケールを使用せず、エンコーディングのみ指定

以下の表に、環境変数LANGにja_JP.utf8を指定した環境におけるinitdbコマンドの指 定方法とデータベース・クラスタのロケールの関係をまとめています。

表 41 initdbコマンドのロケール指定

initdbコマンド・パラメータ lc_collate lc_ctype encoding

指定なし ja_JP.utf8 ja_JP.utf8 UTF8

--locale=ja_JP ja_JP ja_JP EUC_JP

--locale=ja_JP --encoding=utf8 initdbコマンド実行エラー

--locale=ja_JP.utf8 ja_JP.utf8 ja_JP.utf8 UTF8

--locale=ja_JP.EUC_JP --encoding=utf8 initdbコマンド実行エラー

--no-locale C C SQL_ASCII

--no-locale --encoding=utf8 C C UTF8

$ initdb --no-locale --encoding=utf8 data

The files belonging to this database system will be owned by user "postgres".

This user must also own the server process.

The database cluster will be initialized with locale "C".

The default text search configuration will be set to "english".

<<以下省略>>

postgres=> SELECT datname, pg_encoding_to_char(encoding), datcollate FROM pg_database ;

datname | pg_encoding_to_char | datcollate ---+---+--- template1 | UTF8 | C

template0 | UTF8 | C postgres | UTF8 | C (3 rows)

□ ja_JPロケール設定による機能

日本語ロケール(ja_JP)を設定したデータベースでは以下の機能が有効になります。

 全角アルファベットに対するupper関数lower関数

upper関数、lower関数が全角アルファベットでも利用できるようになります。半角/

全角が維持された状態で変換されます。ロケールなしのデータベースでは変換は行われま せん。

例 76 upper / lower関数

 money型に対する検索で円マークの付与

psqlコマンドからmoney型の列を検索すると、データ先頭に通貨記号が付与されま す。ただし検証の結果、ロケール付のデータベースでも、データベース・クラスタがロケ ール付で作成されていない場合はドル記号($)になります。

例 77 money型

postgres=> SELECT upper('a'), lower('A') ; ← 半角に対する upper/lower upper | lower

---+--- A | a (1 row)

postgres=> SELECT upper('a'), lower('A') ; ← 全角に対する upper/lower upper | lower

---+--- A | a (1 row)

postgres=> SELECT 100::money ; money

---

¥100 (1 row)

 ORDER BY句による順序

ロケール機能が有効になっているデータベースで文字列型に対するORDER BY句を指 定した場合、ロケールに応じた順序で出力されます。以下の表はエンコードUTF-8を使 用した場合の大小関係です。

表 42 ロケール指定による文字列の大小関係

大小関係 ja_JPロケール ロケールなし 備考 小

長さ0文字列 長さ0文字列 半角数字 半角数字 半角英字 半角英字 半角カナ ひらがな 全角数字 全角カタカナ 全角英字 全角数字 ひらがな 全角英数 全角カタカナ 半角カナ

NULL NULL

 半角/全角の区別

日本語ロケールが有効なデータベースでも、全角と半角データ別データとして扱われま す。またアルファベットの大文字/小文字も区別されます。

表 43 ロケール指定による大小関係

比較対象1(例) 比較対象2(例) 等しいか 備考 半角アルファベット(A) 全角アルファベット(A) 異なる

半角大文字(A) 半角小文字(a) 異なる 全角カタカナ(ア) 半角カタカナ(ア) 異なる 全角カタカナ(ア) 全角ひらがな(あ) 異なる