データベースがあり、クライアントは Delphi 2007 で作成されています。最新の Interbase 2009 が使用されています。データベースは古く、2002 年頃に作成されたもので、現在は 25 GB を超えています。最近、IBConsoleでそれを発見しました
upper('åäö')
'åäö' を生成します。「ÅÄÖ」である必要があります。これは、英語のアルファベットにないスウェーデンの文字です。
この件について検索したところ、このリンクが見つかりました。重要な部分は次のとおりです。
既存のデータベースのデフォルトの文字セットを変更するにはどうすればよいですか? これを行う方法はサポートされていません。メタデータからデータベースを再作成する必要があります。
このブログは 2004 年 6 月 29 日に Craig Stuntz によって書かれました。Interbase がその後進化し、Interbase 2009 の文字セットを簡単に変更できる方法があることを願っています。不可能な場合は、gbk バックアップ ファイルから実行できますか? 最後のオプションは、適切な文字セットを使用して完全に新しいデータベースを作成し、何らかの方法で古いデータベースからデータを抽出することです。
だから私は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 から取得した結果であるため、この場合はスウェーデン語の文字を小文字に戻すだけです。最善の解決策ではないかもしれませんが、うまくいくと思います。