PostgreSQLエラー「ERROR: invalid byte sequence for encoding "UTF8" 」の原因と対策

投稿者 : OSCA

[PR] "東野・岡村の旅猿"で登場したロケ地を紹介するファンサイト「あの場所へ行こう!」はこちら。

 本稿 では PostgreSQL で「ERROR: invalid byte sequence for encoding “UTF8″」というエラーが発生する場合の、その原因と対策について考察します。

事象

 PostgreSQL から「ERROR: invalid byte sequence for encoding “UTF8″」というエラーが出力されました。

ERROR: invalid byte sequence for encoding "UTF8": 0x8f

原因

 このエラーが発生した箇所は INSERT や UPDATE の SQL を実行している箇所で、SQL文で文字化けが発生しているのが確認できました。 簡単に言ってしまえば、SQLを構築する際に指定した VALUE の値の文字化けが原因です。

対策

 とてもシンプルな原因ではありますが、対策について論じます。 このようなことが発生し得る原因はいくつか考えらえます。

  1. バッチ処理でファイルを読み込んで値をデータベースに登録する処理などの場合、読み込むファイルの文字コード仕様を気にせずに読み込んでしまっている場合があります。 読み込むファイルの文字コードを確認し、正しい文字コードでファイルを読み込むように対応します。
  2. WEBから入力された値をデータベースに登録するような場合、入力値の検証をおこなわずにデータベースの登録処理を行ってしまって発生する場合があります。 またブラウザで表示する画面のHTMLのエンコーディングが UTF-8 ではない場合に、サーバーサイドで文字コード変換に失敗する場合も考えられます。 利用者が文字化けする値を入力しないとも限りませんので、入力値の検証を行って適切でない値が入力された場合は再入力を促すなどの対応が必要でしょう。

おわりに

運用しているシステムで上記のエラーが発生したので、頭の整理を兼ねて記事にしてみました。 皆様のお仕事のお役に立てれば幸いです。

PostgreSQLのトップへ戻る

著者 : OSCA

OSCA

Java, PHP 系のWEBエンジニア。 WEBエンジニア向けコミュニティ「WEBエンジニア勉強会」を主催。 個人として何か一つでも世の中の多くの人に使ってもらえるものを作ろうと日々奮闘中。
@engineer_osca