В чем разница между sqlite3_bind_text, sqlite3_bind_text16 и sqlite3_bind_text64? - PullRequest
0 голосов
/ 25 декабря 2018

Я использую интерфейс sqlite3 C.После прочтения документа в https://www.sqlite.org/c3ref/bind_blob.html я полностью запутался.

В чем разница между sqlite3_bind_text, sqlite3_bind_text16 и sqlite3_bind_text64?

В документе только описано, что sqlite3_bind_text64 может принимать параметр кодировки, включая параметрSQLITE_UTF8, SQLITE_UTF16, SQLITE_UTF16BE или SQLITE_UTF16LE.

Так что, исходя из параметров, передаваемых в эти функции, я предполагаю, что:

sqlite3_bind_text для символов ANSI, char * sqlite3_bind_text16 для UFсимволов sqlite3_bind_text64 для различных кодировок, упомянутых выше.

Это правильно?

Еще один вопрос:

В документе сказано «Если четвертый параметрЕсли sqlite3_bind_text () или sqlite3_bind_text16 () отрицательны, то длина строки равна числу байтов до первого нулевого ограничителя. "Но там не сказано, что будет с sqlite3_bind_text64.Изначально я думал, что это опечатка.Однако, когда я передаю -1 в качестве четвертого параметра в sqlite3_bind_text64, я всегда получаю ошибку SQLITE_TOOBIG, которая заставляет меня думать, что они намеренно удаляют sqlite3_bind_text64 из вышеприведенного оператора.Это правильно?

Спасибо

1 Ответ

0 голосов
/ 25 декабря 2018
  • sqlite3_bind_text() - для строк UTF-8.
  • sqlite3_bind_text16() - для строк UTF-16 с использованием собственного порядкового номера вашего процессора.
  • sqlite3_bind_text64() позволяет указатьопределенная кодировка (utf-8, нативный utf-16 или конкретный endian utf-16).Возможно, вам это никогда не понадобится.
  • sqlite3_bind_blob() следует использовать для строк, не относящихся к Юникоду, которые просто обрабатываются как двоичные двоичные объекты;все строковые функции sqlite работают только с Unicode.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...