我需要将数据从不同的旧数据库迁移到新数据库(使用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字段的字符集)?
答案 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
找到更多相关信息