質問

データベースがあり、クライアントはDelphi 2007で書かれています。最新のInterbase 2009が使用されています。データベースは古く、2002年頃に作成されたと思いますが、現在は25 GBを超えています。最近、Ibconsoleでそれを発見しました

upper('åäö')

「Åäö」を生成します。 「Åäö」でなければなりません。これは、英語のアルファベットに欠けているスウェーデンのキャラクターです。

私は主題について検索し、これを見つけました リンク。重要な部分は次のとおりです。

既存のデータベースのデフォルト文字セットを変更するにはどうすればよいですか?これを行う方法はありません。メタデータからデータベースを再作成する必要があります。

このブログは、Craig Stuntzによって2004-06-29が書かれたものです。私の希望は、Interbaseがそれ以来進化しており、Interbase 2009のキャラクターセットをほとんど努力せずに変更する方法があることです。不可能な場合は、GBKバックアップファイルから実行できますか?最後のオプションは、適切なキャラクターセットを備えたまったく新しいデータベースを作成し、古いキャラクターからデータをポンプすることです。

だから私には2つの質問があります。

  1. キャラクターセットを変更する最も簡単な方法は何ですか?
  2. どのキャラクターセットを選択する必要がありますか( 'Åäö')= 'Åäö'

編集: クレイグが言ったように、charsetを認識しているデータをコピーする以外に本当の方法はありません。だから私は別の方法を選びます。

vName := AnsiUpperCase(Nametosearch);
MakeCharLowercase(vName, 'åäö');
// Then use vName when search in database.

procedure TDuplicateDeptForm.MakeCharLowercase(var aName: String; aCharSet: String);
var
  vIndex, i: Integer;
  vChar: String;
begin
  for i := 1 to Length(aCharSet) do
  begin
    vChar := AnsiUpperCase(aCharSet[i]);
    repeat
      vIndex := AnsiPos(vChar, aName);
      if vIndex > 0 then
        aName[vIndex] := AnsiLowerCase(vChar)[1];
    until vIndex = 0;
  end;
end;

これは、この場合のスウェーデンのキャラクターを単純に変換します。これは、私がインターベースから得られる結果です。たぶん、最も素晴らしい解決策ではないかもしれませんが、私はそれがうまくいくと思います。

役に立ちましたか?

解決

スウェーデンの場合、ISO-8859-1またはUnicodeを使用します。 IB 2009の既存のDBSのデフォルトの炭化を変更する新しい方法に精通していません。 DBのすべてのテキストのストレージ形式を変更することになります!

データをポンピングする最も簡単な方法は、おそらくのような専用のデータポンプです DBワークベンチ. 。これには「Pro」エディションが必要ですが、それが機能するかどうかを確認するための無料トライアルがあります。繰り返しますが、データを直接コピーすることができない可能性があることを考えてください。あなたはそれを炭絵に意識する方法でしなければならないでしょう。これが、ヨーロッパ人から常にDB管理ツールを購入する必要がある理由です。 :)

他のヒント

FBCloneという名前の無料のコマンドラインツールユーティリティがあります。キャラクターセットを変更するデータベースを再作成できます。プロジェクトはUIBコンポーネントを使用するため、InterbaseまたはFirebirdを使用できます。http://code.google.com/p/fbclone/

update RDB$DATABASE set RDB$CHARACTER_SET_NAME = 'UTF8'
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top