Delphi - Firebird数据迁移 - 不同的字符集

时间:2013-09-12 13:38:14

标签: delphi firebird delphi-xe firebird2.5 fibplus

我需要将数据从不同的旧数据库迁移到新数据库(使用Firebird 2.5上的IBExpert创建)。我正在使用FIBPlus components。现在我知道旧的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 here

提供的SQL获取字段定义

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

因为所有数据集(FIBPlus或IBDac)或从原始TDataset继承,所以AsString应该只为组件工作,所以如果它适用于IBDac,它应该以相同的方式用于FIBPlus。

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

找到更多相关信息