1. ホーム
  2. postgresql

[解決済み] 挿入時の Postgres のエラー - ERROR: エンコーディング "UTF8" のバイト列が無効です。0x00

2023-03-15 04:46:21

質問

mysqlからpostgresにデータを挿入する際、以下のエラーが発生します。

入力データからすべてのNULL文字を手動で削除しなければならないのでしょうか? postgres にこれをさせる方法はありますか?

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

どのように解決するのですか?

PostgreSQLはテキストフィールドにNULL( \0x00) 文字を格納することをサポートしていません(これは、完全にサポートされているデータベースのNULL値とは明らかに異なります)。

ソースは http://www.postgresql.org/docs/9.1/static/sql-syntax-lexical.html#SQL-SYNTAX-STRINGS-UESCAPE

NULL文字を格納する必要がある場合、byteaフィールドを使用する必要があります - 何でも格納できますが、それに対するテキスト操作をサポートしません。

PostgreSQLがテキスト値でのNULLをサポートしないことを考えると、これを削除させる良い方法はないでしょう。データをbyteaにインポートし、後で特別な関数(perlか何かで)を使用してテキストに変換することはできますが、ロードする前に前処理でそれを行う方が簡単なようです。