Хранение данных utf-8 в текстовом поле в SQLite приводит к содержимому BLOB - PullRequest
0 голосов
/ 11 июня 2019

Я пытаюсь сохранить некоторые данные формы в формате UTF-8 в базе данных sqlite. Я связываю ввод с помощью

int bindText(int index, const char *text, void func(void*)) {
    return sqlite3_bind_text(comp_stat, index, text, -1, func);
}

и скомпилированный оператор является простым INSERT-запросом.

"INSERT INTO `tbl` (`id`,...`,`title`) VALUES (?,...,?);

и оператор CREATE равен

CREATE TABLE `tbl` (
`id`    INTEGER NOT NULL,
...,
`title` TEXT
);

Запрос выполняется, и все в порядке, за исключением того, что если входная строка не является строкой utf-8, не входящей в ASCII, я не смогу получить ее, и Браузер SQLite также показывает это поле как BLOB, а не как TEXT. больше. Я также безнадежно попробовал sqlite3_bind_text16, как кто-то предложил, и, конечно, результат был не в порядке, но на этот раз это был искаженный текст в совершенно другой кодовой странице UTF-8, но поле снова было TEXT, а не BLOB.

Если я использую простые символы abcd, все работает нормально, поэтому я не думаю, что в моих запросах есть фундаментальные проблемы. Любая помощь приветствуется.


OK. В моих тестах возникла проблема, и теперь у меня гораздо более точная информация!

Это работает: cs-> bindText (12, u8 "سلام", sfree);

но это не удалось (BLOB): cs-> bindText (12, (std :: string (u8 "سلام")). c_str (), sfree);

В чем моя проблема? Еще раз спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...