2

我需要将数据从不同的旧数据库迁移到新数据库(在 Firebird 2.5 上使用 IBExpert 创建)。我正在使用FIBPlus 组件。现在我知道旧的 varchars 和 blob 文本在不同的字符集和排序规则中(大多数是 WIN1252)。

DBImport(我从中获取数据的数据库)具有以下属性:

  pFIBDBBase.DBName := path_to_the_database_file;
  pFIBDBBase.ConnectParams.UserName := 'SYSDBA';
  pFIBDBBase.ConnectParams.Password := 'masterkey';
  pFIBDBBase.ConnectParams.CharSet := 'NONE';
  pFIBDBBase.SQLDialect := 3;

DBNew(新数据库)具有以下属性:

  pFIBDBSecond.ConnectParams.UserName := 'SYSDBA';
  pFIBDBSecond.ConnectParams.Password := 'masterkey';
  pFIBDBSecond.ConnectParams.CharSet := 'UTF8';
  pFIBDBSecond.SQLDialect := 3;

我在这里使用 TOndrej 提供的 SQL 获取字段定义

在新数据库中,相同的字段现在是 UTF8。

我的问题是:如果我使用FieldByName ('etc').AsString 从旧数据库中读取,并使用 ParamByName ('etc').AsString 填充新数据库,则字符串和文本 blob 数据是 100%相同(不管 DBImport 字段的字符集)?

4

1 回答 1

1

我在 2011 年为带有 Delphi XE 和 IBDac 组件的 Interbase 2007 数据库做了同样的事情。

自 2011 年 12 月以来,我们一直在使用新的 UTF-8 数据库,我没有看到数据库从 NONE 迁移到 UTF-8 的任何问题。

我不能保证 100%,但看起来转换完美无缺。

因为所有数据集(FIBPlus 或 IBDac)或从原始 TDataset 继承,AsString 应该适用于一些但组件,因此如果它与 IBDac 一起使用,它应该以相同的方式适用于 FIBPlus。

您还可以使用 IBExpert 从旧数据库中的旧表中选择插入新数据库中的新表,IBExpert 将负责字符串转换。这对我来说不是一个选择,因为 IBExpert 不会为 Interbase 这样做。您可以在http://ibexpert.net/ibe/index.php?n=Doc.ConvertYourFirebirdApplicationsToUnicode找到更多信息

于 2013-09-12T19:58:55.400 回答