古いデータベースがあり、Firebird2.5に変換したいと思います。よく知られている問題「gbak:エラー:不正な形式の文字列gbak:無効なデータが検出されました」を含むblobテキストフィールドを含むテーブルのデータを復元すると、問題が発生します。
実行される手順:
- gfix -user SYSDBA -password masterkey f:\ dbb.db -shut -force 0
- gfix -v -full -user SYSDBA -password masterkey f:\ dbb.db
- gbak -v -t -g -ig -user SYSDBA -YF:\ backup.log -password "masterkey" f:\ dbb.db F:\ dbb1.db
- gbak -r -v -o -p 16384 -YF:\ log.txt -user SYSDBA -password masterkey "f:\ dbb1.db" "f:\ new.db" -fix_fss_data win1251 -rep
文字セットをwin1252、utf8またはunicode_fssに置き換えても、問題は解決しません。
また、InterBaseDataPumpバージョン3.4を使用してデータを移行しようとしました。
手順:
- メタテーブルをバックアップする
- 新しいデータベースにメタテーブルを復元する
- InterBaseDataPumpを使用してデータを移行する
「不正な文字列」でエラーが発生しました。
エラーが発生するすべてのテーブルには、「BLOB SUB_TYPE 1SEGMENTSIZE80」タイプのフィールドがあります。
当初、データベースには文字セットWIN1252が含まれていたと思います。その後、誰かが文字セットをUTF8に変更し、文字セットのすべてのフィールド定義を変更して、WIN1252からUTF8に照合しました。そうしないと、これらの不正な形式の文字列エラーが発生する理由がわかりません。また、この問題はFireBird2.0からFireBird2.5への移行に共通していることも理解しました。
誰かがこれを解決する方法についてアイデアを持っていますか?