HSQLDB から FIREBIRD に移動した テーブルはHSQLDB に戻せなくなります(忘備録)

これは質問ではなく報告です。

以下のリンク先で実施した質問の続編のようなものです。



BASEのテーブル作成時のテキスト固定CHARにおける疑問




別の件名に変更してアップたほうが後々、私のような初心者に役立つと判断しました。

私自身の忘備録も兼ねています。


###LIBRE OFFICE の BASE 上で、
###HSQLDB側 から FIREBIRD側 にいちどでも移動した テーブルは、
###HSQLDB側 に戻せなくなります。


これが LIBRE 側によるバグなのか、FIREBIRD 側によるバグなのか、

初心者の私にはわかりませんが、いずれにしてもバグのようです。

###可能なテーブル移動は以下の2パターンのみです。

 HSQLDB側 ←→ HSQLDB側  双方向で可能
 HSQLDB側 →  FIREBIRD側  片道通行

HSQLDB側 のテーブル内 に `CHAR` が設定されたフィールドがひとつでもあると、
FIREBIRD側 に移動したとたん、末尾に予定外の大量の空白が勝手に挿入されてしまいます。
これが理由で、HSQLDB側 には(そのままでは)二度と戻せなくなってしまいます。

HSQLDB から FIREBIRD に移行しようとして試行錯誤している方は気を付けてください。
以下のような警告が出ます。
SQL ステータス: 22001
エラーコード: -124
Value too long in statement 

himajin100000 さんのコメント引用
UTF-8 では 1文字あたり最大4バイトとると考えて、
4×3bytes =12bytesになるまで補充されているとの情報あり。

FIREBIRD 側が、標準から逸脱した挙動しているとの見解あり。
あるいは FIREBIRD 用の SDBCドライバが VARCHAR として解釈すべきなのか。未検証。

###追加情報1
うっかり FIREBIRD にしてしまうと、以下の行為を FIREBIRD 上でするのは危険です。

もしやると、テーブル内の全てのデータを FIREBIRD が削除してしまいます。

 CHARテーブル内の文字数が、
 FIREBIRD による半角空白の追加によって変化してしまったのを戻したくて、
 フィールドの設定を CHAR から VARCHAR に変更する。

これを回避する方法はひとつしかありません。

 FIREBIRD にする前に、HSQLDB  側であらかじめ、CHAR を全て VARCHAR にしておく。

この時、私のような初心者が躓きやすいのは「HSQLDB 側のリレーションテーブル」です。

ここで関連付けが設定されているままでフィールドの属性を変更すると、データが削除されます。

作業を開始する前に、HSQLDB  側のリレーションを全て外してからおこなうこと。

###追加情報2
うっかり FIREBIRD にしてしまうと、

テーブル内の要素で、FIREBIRD が削除してしまうものは他にもあります。

 ①リブレのテーブル内の編集画面に記入していた各フィールドごとの「概要」
 ②各フィールドに設定していた「標準値」

この他にもあるかもしれません。



上記の「概要」を忘備録的に利用していた人は気を付けてください。



「標準値」が削除されてしまうので、

「フォームのデータ登録画面」に「標準値」が出現しなくなります。

「登録ミスが発生する可能性」があります。



「登録ミスを避ける」には、FIREBIRD側で再度「標準値を設定し直す」しかありません。

実は、odbファイルはzipファイルであって、少なくとも変換直後であれば、そのzipファイルのdatabaseフォルダの中身は新規に生成されたfirebird.blk以外そのまま内部に残っていたりする。

かつ、content_before_migration.xmlという形で設定も残っているので、少なくともそのタイミングなら復旧可能。一応念の為。

ありがとうございます。了解しました。



実は今、私は私が作ったデータベースではないものを触っています。

作った人は国際結婚して退職し、今は遥か海の向こうのかなたです。



そもそもエクセルはそこそこ使いこなせてはいるつもりでしたが、

データベースはアクセスすら触ったことがなくて、悩みっぱなしです。



任された限りはどうにかしようとしていますが、

時々、引き受けたことを後悔したりもします。



よろしくお願いします。



それにしてもCHARだらけです。。。

全てのテーブルで使用されてます。