データをmysqlからpostgresに挿入すると、次のエラーが発生します。挿入時のPostgresエラー - エラー:エンコーディング "UTF8"の無効なバイトシーケンス:0x00
入力データからすべてのヌル文字を手動で削除する必要がありますか? postgresに私のためにこれをさせる方法はありますか? PostgreSQLはNULLを格納サポートしていません
ERROR: invalid byte sequence for encoding "UTF8": 0x00
データをmysqlからpostgresに挿入すると、次のエラーが発生します。挿入時のPostgresエラー - エラー:エンコーディング "UTF8"の無効なバイトシーケンス:0x00
入力データからすべてのヌル文字を手動で削除する必要がありますか? postgresに私のためにこれをさせる方法はありますか? PostgreSQLはNULLを格納サポートしていません
ERROR: invalid byte sequence for encoding "UTF8": 0x00
(\ $ 00)テキストフィールド内の文字(これは完全にサポートされているデータベースのNULL値、とは明らかに異なっています)。
出典: - あなたが欲しいものを保存する必要がありますが、それにテキスト操作をサポートしていません。あなたはNULL文字を格納する必要がある場合http://www.postgresql.org/docs/9.1/static/sql-syntax-lexical.html#SQL-SYNTAX-STRINGS-UESCAPE
、あなたはbytea型のフィールドを使用する必要があります。
PostgreSQLがテキスト値でそれをサポートしていないとすれば、それを削除する良い方法はありません。データをbyteaにインポートし、後で特別な関数(perlなど)を使ってテキストに変換することもできますが、読み込む前に前処理で行う方が簡単です。
あなたが最初のBLOBフィールドにデータを挿入し、その後folloing機能をテキストフィールドにコピーすることができ
CREATE OR REPLACE FUNCTION blob2text() RETURNS void AS $$
Declare
ref record;
i integer;
Begin
FOR ref IN SELECT id, blob_field FROM table LOOP
-- find 0x00 and replace with space
i := position(E'\\000'::bytea in ref.blob_field);
WHILE i > 0 LOOP
ref.bob_field := set_byte(ref.blob_field, i-1, 20);
i := position(E'\\000'::bytea in ref.blobl_field);
END LOOP
UPDATE table SET field = encode(ref.blob_field, 'escape') WHERE id = ref.id;
END LOOP;
End; $$ LANGUAGE plpgsql;
-
SELECT blob2text();
ちょうどregexでNULLバイト:
s/\x00//g;
は空の文字列で、nullバイトと見なされますか? 'replaceAll(" s/\ x00 // g "、" ")'は他のnullに置き換えられませんか? –
空の文字列はnullバイトと見なされません。ヌルのバイト値は実際の文字ですが、目に見えません。 –
Javaを使用している場合は、次のように挿入前にx00文字を置き換えることができます。
myValue.replaceAll("\u0000", "")
溶液ポスト以下に設けられ、チャバによって説明した
https://www.postgresql.org/message-id/1171970019.3101.328.camel%40coppola.muc.ecircle.de
それぞれ:
in Java you can actually have a "0x0" character in your string, and that's valid unicode. So that's translated to the character 0x0 in UTF8, which in turn is not accepted because the server uses null terminated strings... so the only way is to make sure your strings don't contain the character '\u0000'.
例: は '表store_bytesを作成する( キーINTEGER NULL NOT 、 data bytea NOT NULL ); ' – zengr