PostgreSQL 9.4、PHP 5.6への更新後の不具合 [Debian]
詳細は、以下の通りである。
[更新前]
postgresql-9.1 9.1.16-0+deb7u1
php5 5.4.45-0+deb7u4
postgresql-9.1-903.jdbc3.jar
[更新後]
postgresql-9.4 9.4.8-0+deb8u1
php5 5.6.23+dfsg-0+deb8u1
postgresql-9.4.1209.jdbc42.jar
1. 不具合-1
(1) 発生事象
JDBC において、日本語を含むテーブルへの操作でエラーが発生する。
・UTF8 以外の日本語を含む場合に、SQLException が発生する。
・同様の設定でも、PostgreSQL 9.1 ではエラーは発生しない。
・当該データベースの文字コードに関する設定は、下記の通りである。
(Encoding: SQL_ASCII, Collate: C, Ctype: C)
(補足)
エラーログは、下記の通りである。
(/var/log/postgresql/postgresql-9.4-main.log)
ERROR: invalid byte sequence for encoding "UTF8": 0xa5
(2) 対処方法
データベースの作成時に、エンコーディングを指定する。
(例) EUC_JP を使用する場合 % createdb -E EUC_JP -T template0 test
2. 不具合-2
(1) 発生事象
PHP において、HTTP ヘッダーでのエンコーディングの設定が効かない。
このため、文字化けするページがある。
・下記の設定が効かない。
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
(補足)
PHP 5.6 での仕様の変更のためである。
(2) 対処方法
PHP の default_charset の設定で対応する。
(a) /etc/php5/apache2/php.ini で設定する。
(例) EUC-JP を使用する場合 default_charset = EUC-JP
(b) ページ毎に変更する場合には、HTTP ヘッダーで設定する。
HTTP ヘッダーに下記のコードを追加する。
(例) Shift_JIS を使用する場合 <?php if (PHP_VERSION >= 5.6) { ini_set('default_charset', 'Shift_JIS'); } ?>
3. 備考
PostgreSQL の更新により、ブート時に下記のようなワーニングが出力されなくなった。
postgres (1416): /proc/1416/oom_adj is deprecated, \ please use /proc/1416/oom_score_adj instead.