PostgreSQL 10.10で日本語データ以外を修正するとupdateクエリーを実行した先で更新データがずれる問題がある【調査中】
ローカルの開発環境にインストールしたPostgreSQLのロケール
を「C」(ロケール未設定/default)にしてインストールした後に、
lc_collateとlc_ctypeをWindows ShiftJIS(Japanese_Japan.932)
に上書きして、日本語以外のデータのカラムに対してupdate
クエリーを実行すると、対象は更新されず、日本語データが
入っているカラムが日本語以外のデータで上書きされるという
不具合を発見した。
で、PHPで利用しているフレームワーク(CodeIgniter3.1.11)の
PostgreSQLのデータベースドライバーの問題なのか?
PostgreSQL自体の問題なのか?不明だったけど、キーワード
に「postgresql updateクエリー 文字コード」を指定して検索を
したところ、以下の情報が得られたのでメモとしてまとめておく。
ちなみに検索エンジンはDuck Duck Goを使っている。
[不具合と再現手順]
1. PostgreSQL 10.10のロケールを「C」指定でインストール。
エンコードはUTF8。
2. インストール後に、LC_COLLATEとLC_CTYPEをWindows
Shift_JIS(Japanese_Japan.932)に修正。
3. とあるテーブルのデータに日本語と日本語以外(英数字)のデータを
1件投入。
4. CodeIgniter3.1.11(PHP)のプログラムからupdateクエリーを実行。
対象は日本語データが登録されていないカラム。
5. 更新結果をpgAdmin4またはプログラムで確認。
更新データが対象カラムの左の日本語データが登録されたカラム
のデータで、対象カラムの右隣の日本語以外のデータで上書き更新
されている。
※尚、日本語以外のデータは変更ができない状態になっている
※そもそもWindowsで開発してんじゃねーよ問題があるのかも
しれない...(Φω|
[参考サイト]