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

upper('åäö')

产生“Åäö”。应该是“Åäö”。这是英语字母中缺少的瑞典角色。

我搜索了这个主题,发现了这个 关联。重要的部分是:

如何更改现有数据库的默认字符集?没有支持的方法来做到这一点。您应该从元数据重新创建数据库。

该博客是由Craig Stuntz撰写的2004-06-29,我希望Interbase从那以后发展了,并且有一种方法可以改变Interbase 2009的角色集,而很少努力。如果不可能,可以从GBK备份文件中完成?最后一个选项是创建一个具有正确的字符集的全新数据库,并以某种方式从旧数据库中创建泵数据。

所以我有2个问题。

  1. 更改字符的最简单方法是什么?
  2. 我应该选择哪个字符具有鞋帮('Åäö')='Åäö'

编辑: 正如克雷格(Craig)所说,除了复制了解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;

在这种情况下,这只是将瑞典字符转换回小写,因为这是我从InterBase获得的结果。也许不是最好的解决方案,但我认为它有效。

有帮助吗?

解决方案

用于瑞典使用ISO-8859-1或Unicode。我不熟悉IB 2009中现有DBS中现有DB中的默认字符的任何新方法。当您考虑所涉及的内容时,您会发现您会重新创建DB。您将更改DB中所有文本的存储格式!

泵送数据的最简单方法可能是一个专用数据泵 DB工作台. 。您需要此版本的“ Pro”版本,但是有一个免费试用版可以查看它是否有效。同样,请考虑您可能无法直接复制数据;您必须以一种炭化的方式来做。这就是为什么您应该始终从欧洲人那里购买数据库管理工具的原因。 :)

其他提示

有一个名为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