FMDB stringForColumn Возвращает ноль - PullRequest
1 голос
/ 16 января 2012

Я перебираю набор результатов FMDB, сгенерированный из базы данных SQLite3, создавая объекты для последующего использования. Содержимое данных создается различными пользователями с использованием различных текстовых редакторов и кодировок.

Некоторые записи проблематичны, возвращая ноль для значения столбца, даже если в столбце есть текст.

Например, я вижу текст для столбца в базе данных, когда я запускаю запрос командной строки, но метод FMDB stringForColumn возвращает ноль. Я также вижу, что потенциальная причина - высокие символы ascii в содержимом столбца, которые, скорее всего, были получены пользователем, копирующим и вставляющим текст из MS Word. Мой вопрос заключается в том, как лучше всего справиться с этим «грязным» данными, понимая, что некоторые данные могут находиться в базе данных с этими символами?

enter image description here

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]];
}

Ответы [ 2 ]

1 голос
/ 09 октября 2012

Даже если у вас есть разные пользователи, которые вводят код из нескольких текстовых редакторов и кодировок, они должны быть нормализованы в соответствии с кодировкой, установленной для БД.Похоже, это может быть связано с тем, что FMDB неправильно обрабатывает перевод кодировки, хранящейся в БД.Может быть, поскольку вы знаете кодировку данных, вы можете вытащить содержимое и сделать свой собственный «перевод»?Попробуйте вытащить данные напрямую, используя dataForColumn или UTF8StringForColumnIndex, и посмотрите, что вы получите.

Кроме того, «где» не так, но я бы сказал, что это излишне.Я также добавил бы, что, поскольку это не имеет смысла, это может ввести в заблуждение или ввести в заблуждение тех, кто не очень свободно говорит в SQL.

0 голосов
/ 14 апреля 2012

«Где» в вашем утверждении выбора неверно.

...