- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- PostgreSQL/システム管理/ロケール・日本語設定 へ行く。
- 1 (2007-04-10 (火) 08:44:04)
- 2 (2011-12-27 (火) 06:36:30)
- 3 (2012-04-03 (火) 19:40:00)
- 4 (2012-04-03 (火) 21:04:56)
- 5 (2013-09-17 (火) 18:00:21)
ロケール・日本語設定
各種ロケールの確認
psql> SHOW lc_collate;
psql> SELECT name, setting, context FROM pg_settings WHERE name LIKE 'lc%';
name | setting | context -------------+---------+----------- lc_collate | C | internal lc_ctype | C | internal lc_messages | C | superuser lc_monetary | C | user lc_numeric | C | user lc_time | C | user
エンコーディングの確認
psql> \encoding
UTF8
全データベースのロケール・エンコーディングの確認
$ psql -l
List of databases Name | Owner | Encoding | Collation | Ctype | Access privileges -----------+----------+----------+-----------+-------+----------------------- mydb01 | taro | EUC_JP | C | C | mydb02 | taro | UTF8 | C | C |
ロケール無し=ロケールC
「initdb locale=C」と「initdb --no-locale」は同じ意味。
ロケールを設定するタイミング
initdbもしくはcreatedbする時。createdbで指定できるのはPostgreSQL8.4以降。
UTF8でinitdbして、EUCJPでcreatedbする
initdbする
$ initdb --locale=C --encoding=UTF8
createdbする
$ createdb --encoding=EUC_JP --locale=ja_JP.EUC_JP --template=template0 mydb01
localeとencodingのエンコーディングは揃える。
psqlで接続
$ LC_ALL=ja_JP.eucjp psql mydb01
ターミナルのエンコーディングはEUCにしておく。
日本語が正しく扱えるか確認する
CREATE TABLE t1 ( str text ); INSERT INTO t1 VALUES ( 'ううう' ); INSERT INTO t1 VALUES ( 'ええ' ); INSERT INTO t1 VALUES ( 'お' ); INSERT INTO t1 VALUES ( 'いいいい' ); INSERT INTO t1 VALUES ( 'あああああ' );
SELECT * FROM t1 WHERE str LIKE '%あ%'; SELECT length(str), str FROM t1 ORDER BY str;
psqlで日本語入力が利かない(エコーバックされない)
readlineを切ってみる。
$ psql -n mydb01