2

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

upper('åäö')

'åäö' を生成します。「ÅÄÖ」である必要があります。これは、英語のアルファベットにないスウェーデンの文字です。

この件について検索したところ、このリンクが見つかりました。重要な部分は次のとおりです。

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

このブログは 2004 年 6 月 29 日に Craig Stuntz によって書かれました。Interbase がその後進化し、Interbase 2009 の文字セットを簡単に変更できる方法があることを願っています。不可能な場合は、gbk バックアップ ファイルから実行できますか? 最後のオプションは、適切な文字セットを使用して完全に新しいデータベースを作成し、何らかの方法で古いデータベースからデータを抽出することです。

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

  1. 文字セットを変更する最も簡単な方法は何ですか?
  2. upper('åäö') = 'ÅÄÖ' を使用するには、どの文字セットを選択する必要がありますか?

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

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;

これは、Interbase から取得した結果であるため、この場合はスウェーデン語の文字を小文字に戻すだけです。最善の解決策ではないかもしれませんが、うまくいくと思います。

4

3 に答える 3

4

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

于 2010-09-15T18:45:23.017 に答える
3

スウェーデン語の場合は、ISO-8859-1 または UNICODE を使用してください。IB 2009 の既存の DB でデフォルトの文字セットを変更する新しい方法に精通していません。何が関係しているのかを考えると、とにかく DB を再作成していることがわかります。DB 内のすべてのテキストの格納形式を変更することになります!

データをポンピングする最も簡単な方法は、おそらくDB Workbenchのような専用のデータ ポンプです。これには「Pro」エディションが必要ですが、機能するかどうかを確認するための無料試用版があります. 繰り返しますが、データを直接コピーすることはできない場合があることを考慮してください。文字セットを意識した方法でそれを行う必要があります。これが、常にヨーロッパの人から DB 管理ツールを購入する必要がある理由です。:)

于 2010-08-23T13:29:22.940 に答える
0
update RDB$DATABASE set RDB$CHARACTER_SET_NAME = 'UTF8'
于 2016-10-26T15:50:57.360 に答える