2

我们有一个数据库,我们的客户端是用 Delphi 2007 编写的。使用的是最新的 Interbase 2009。该数据库很旧,我相信它是在 2002 年左右创建的,现在已经超过 25 GB。最近我发现在 IBConsole

upper('åäö')

生成“åäö”。它应该是“ÅÄÖ”。这是英文字母表中缺少的瑞典语字符。

我搜索了该主题并找到了此链接。重要的部分是:

如何更改现有数据库的默认字符集?没有支持的方法来执行此操作。您应该从元数据重新创建数据库。

该博客由 Craig Stuntz 于 2004 年 6 月 29 日撰写,我希望 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 Workbench中的那种专用数据泵。为此,您需要“专业版”,但有免费试用版可以查看它是否有效。同样,考虑到您可能无法直接复制数据;您必须以字符集感知的方式进行操作。这就是为什么您应该始终从欧洲人那里购买数据库管理工具的原因。:)

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