我正在遍历从SQLite3数据库生成的FMDB结果集,创建稍后要使用的对象。 数据内容由各种用户使用各种文本编辑器和编码创建。
一些记录存在问题,即使列中有文本,也会为列值返回nil。
例如,当我运行命令行查询但是FMDB方法stringForColumn返回nil时,我看到数据库中列的文本。我还看到,潜在的原因是列内容中的高ascii字符,很可能是用户从MS Word复制和粘贴文本。我的问题是处理这种“脏”数据的最佳方法是什么,意识到某些数据可能存在于具有这些字符的数据库中?
NSMutableDictionary *words = [[NSMutableDictionary alloc] init];
FMResultSet *rs = [db executeQuery:@"SELECT * FROM `foo` WHERE 1"];
while ([rs next]) {
Word *myWord = [[Word alloc] init];
//Coming in as a nil value eventhough there is text in the database column
[myWord setDefinition:[rs stringForColumn:@"definition"]];
[words setObject:[myWord definition] forKey:[myWord term]];
}
答案 0 :(得分:1)
即使您有多个用户从多个文本编辑器和编码中输入代码,也必须将其标准化为数据库设置的编码。 似乎这可能与FMDB没有正确处理存储在DB中的编码的转换有关。也许因为你知道数据的编码,你可以拉 内容并做自己的“翻译”?尝试使用dataForColumn或UTF8StringForColumnIndex直接提取数据,看看你得到了什么。
顺便说一句,“哪里”没有错,但我会说这是多余的。我还要补充一点,因为它没有任何意义,它可能会误导或混淆那些不像sql那样流利的人。
答案 1 :(得分:-3)
select语句中的“Where”不正确。