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

Delphi-Firebird数据迁移-不同的字符集,delphi,firebird,delphi-xe,firebird2.5,fibplus,Delphi,Firebird,Delphi Xe,Firebird2.5,Fibplus,我需要将数据从不同的旧数据库迁移到新数据库(使用Firebird 2.5上的IBExpert创建)。我在用电话。现在我知道旧的varchar和blob文本位于不同的字符集和排序规则中(大多数是WIN1252) DBImport(从中获取数据的数据库)具有以下属性: pFIBDBBase.DBName := path_to_the_database_file; pFIBDBBase.ConnectParams.UserName := 'SYSDBA'; pFIBDBBase.Conne

我需要将数据从不同的旧数据库迁移到新数据库(使用Firebird 2.5上的IBExpert创建)。我在用电话。现在我知道旧的varchar和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;
  pFIBDBSecond.ConnectParams.UserName := 'SYSDBA';
  pFIBDBSecond.ConnectParams.Password := 'masterkey';
  pFIBDBSecond.ConnectParams.CharSet := 'UTF8';
  pFIBDBSecond.SQLDialect := 3;
DBNew(新数据库)具有以下属性:

  pFIBDBBase.DBName := path_to_the_database_file;
  pFIBDBBase.ConnectParams.UserName := 'SYSDBA';
  pFIBDBBase.ConnectParams.Password := 'masterkey';
  pFIBDBBase.ConnectParams.CharSet := 'NONE';
  pFIBDBBase.SQLDialect := 3;
  pFIBDBSecond.ConnectParams.UserName := 'SYSDBA';
  pFIBDBSecond.ConnectParams.Password := 'masterkey';
  pFIBDBSecond.ConnectParams.CharSet := 'UTF8';
  pFIBDBSecond.SQLDialect := 3;
我使用TOndrej提供的SQL获取字段定义

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


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

我在2011年对Interbase 2007数据库做了同样的操作,该数据库包含Delphi XE和IBDac组件

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

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

由于所有数据集(FIBPlus或IBDac)或从原始TDataset继承而来,AsString应适用于某些but组件,因此如果它适用于IBDac,则应适用于FIBPlus

您还可以使用IBExpert对新数据库中的新表进行插入,并从旧数据库中的旧表中进行选择,IBExpert将负责字符串转换。 这对我来说不是一个选项,因为IBExpert不会为Interbase这样做。
您可以在

中找到有关此的详细信息,感谢您提供了-1,但您应该给出原因。AsString应该使用指定的字符集(至少在IBX中完成)属性end Tras将提供的字符串从/传递到当前的codepageCharacterset
NONE
是一件棘手的事情,如果您100%地知道所有数据都在本地系统编码中,则可能不会出现问题,否则可能会出现音译问题。