PostgreSQL 不支援「直接」儲存 Big5 編碼(聽說很古老的版本有支援,但我不清楚...),因此目前的 PGSQL 資料庫支援 Big5 的方式,是把裡面存放的 UTF8 編碼資料,利用內建編碼表,轉換成 Big5 編碼,再把資料送往 Client 端。如果前端送來的是 Big5 編碼,指名 client_encoding 之後,PGSQL 就會進行編碼轉換,以 UTF8 存放到資料庫裡面。
由於 Postgres 會嚴謹檢查資料的規格,不符的會拒絕吃進來,因此遇到沒有內建的 Big5 ↔ UTF8 編碼,會拒絕該筆資料,回傳錯誤。
PGSQL 10 支援的是標準字區,以及 CP950 (
可以到 Unicode 官方網站找到 CP950 原始對照表)的 0xf9d6-0xf9d 部份(這件事寫在
原始碼的 UCS_to_BIG5.pl 這份 Perl Script 裡面)。在這個範圍之外的 Big5 字碼,對 PGSQL 都是從缺,沒有對應。
但是,上述被拒絕的狀況,在台灣偏偏是常常發生...原因是,過往很多系統都會有自造 Big5 字碼,通常會依照各自單位的內部規則,這些自造字用的字碼區,偏偏又在 PGSQL 不認得的區段,所以會發生錯誤..
因此,這裡要紀錄的是,如何從原始碼擴增字碼,讓 PGSQL 認得自造 Big5 字碼。