haiju's 開発メモ

開発に必要な情報を自分用にメモ

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で開発してんじゃねーよ問題があるのかも

 しれない...(Φω|

[参考サイト]

se.ykysd.com

www.postgresql.jp

lets.postgresql.jp

 

teratail.com

blog.miz-ar.info

code.i-harness.com