我需要将数据从不同的旧数据库迁移到新的数据库(用Firebird2.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数据是否是相同的(不管DBImport字段的字符集如何)?
发布于 2013-09-12 19:58:55
2011年,我对一个带有Delphi和IBDac组件的Interbase 2007数据库做了同样的工作。
自2011年12月以来,我们一直在与新的UTF-8数据库合作,我还没有看到从无数据库迁移到UTF-8数据库的任何问题。
我不会保证100%,但看起来转换是完美无缺的。
因为所有数据集(FIBPlus或IBDac)或从原始TDataset继承过来的数据集,AsString都应该使用一些for但是组件,所以如果它与IBDac一起工作,那么对于FIBPlus也应该是同样的工作方式。
您还可以使用IBExpert对新数据库中的新表进行插入,并从旧数据库中的旧表中选择一个选项,IBExpert将负责字符串转换。这对我来说不是一种选择,因为IBExpert不会为Interbase这样做。您可以在http://ibexpert.net/ibe/index.php?n=Doc.ConvertYourFirebirdApplicationsToUnicode上找到有关这方面的更多信息。
https://stackoverflow.com/questions/18765883
复制相似问题