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

質問日 2019-08-03 21:47:35 +0200

雪花 のGravatar画像

updated 2019-08-07 01:57:52 +0200

これは質問ではなく報告です。
以下のリンク先で実施した質問の続編のようなものです。

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側で再度「標準値を設定し直す」しかありません。

edit retag flag offensive close merge delete

Comments

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

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

himajin100000 のGravatar画像himajin100000 ( 2019-08-03 22:53:10 +0200 )edit

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

実は今、私は私が作ったデータベースではないものを触っています。
作った人は国際結婚して退職し、今は遥か海の向こうのかなたです。

そもそもエクセルはそこそこ使いこなせてはいるつもりでしたが、
データベースはアクセスすら触ったことがなくて、悩みっぱなしです。

任された限りはどうにかしようとしていますが、
時々、引き受けたことを後悔したりもします。

よろしくお願いします。

それにしてもCHARだらけです。。。
全てのテーブルで使用されてます。

雪花 のGravatar画像雪花 ( 2019-08-04 19:23:09 +0200 )edit