日記帳
本ページはプロモーションが含まれています
カテゴリー
Links
blog(ブログ)マスター
アンドロイドの巣
ゼロから始めるベランダ菜園
タイトル
ラジコン
2024年5月
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

Firebird upgrade 2.1 to 2.5(その2)

2011-03-09
Firebird upgrade 2.1 to 2.5(その2)


執筆:2011/03/07
編集:2011/03/07


Firebird2.5へアップグレード(その2)

どうやら、metadataというものが、2.5からutf8で保存されるようになったようだ。
データ部分は、デフォルトのデータベースの文字セットと同じになっている気がする。

Firebird2.5から
データベース NONE
だとアップグレード時にgbakがリストアで失敗するので
データベース に文字コードを指定して構造を先に作成したあと、
TIBDatabaseを2つ用意して
Tableループでテーブルのコピーをさくっとして正常動作しました。
(手順としては、データフィールド以外は無視+NULLも)
テーブルのリストは、IBDatabase1.GetTableNames(Tables, False);で取得できます
           if (current_field.FieldKind <> fkData)
              or
              (current_field.IsNull)
             then
              Continue;
           // コピー
           destTable.FieldByName(current_field.FieldName).AsVariant := current_field.AsVariant;

Shift_JISから、UTF8へ保存する場合は、破損する場合があるので注意しよう。

将来性を考えて、
専用変換ソフトを作って、ワンプッシュで新しいデータベースにコピーできるようにしました。
(TableとGENをコピー)


ここは、素直に、データベースとアプリケーションとも同じ文字コードで接続したいと思います。

Todo: データ移行ソフトのコピー後の全データ照合。


【まとめ】
Firebird 2.5 のまとめ
データベース
の文字コード
Clientの
文字コード
NONE SJIS データは Shift_JIS。
2.1から2.5にアップグレードできず。
(gbakのリストアができない)。
特定の文字で落ちている
CP943C
CP943C CP943C Japanese 不明。 Shift_JISもどき?
Shift_JISは、CP932なので不明。
SJIS SJIS UPPER関数でエラー。
(2.1からのアップグレードに関しては、不明。
metadataの更新が必要?)
utf8 SJIS  Ⅱなどの文字で落ちるので使用しないこと。
FirebirdのSJISは、Shift_JISではないので注意。
utf8 CP943C 表示が遅くなる。
utf8 UTF8 未確認だがおそらく文字変換が介入しないので大丈夫

UPPER関数でエラー
  UTF8以外で接続して、UPPERを呼ぶとエラーが発生することがある。
  おそらく内部的なバグが原因。
  UPPERを除くとエラーは起きない。
arithmetic exception, numeric overflow, or string truncation
Cannot transliterate character between character sets.

とりあえず、Shift_JIS - Shift_JIS 接続で動くので、
テストしてアプリケーションの問題箇所を数カ所修正して大丈夫になりました。

結局
  文字  'Ⅱ'  の変換(UTF8→SJIS)で落ちていることがわかりました。
  CP943Cにすることで解決。

今日のキーワード
SJIS lc_ctype=SJIS 文字 Ⅱ で エラー
CP943C lc_ctype=CP943C Shift_JIS 接続?


さぁ Dot Netへレッツゴー!
C#で らくらくプログラミング


トラックバック
トラックバックはありません。
PR

[PR]