sqlite3_bind_text,sqlite3_bind_text16和sqlite3_bind_text64有什么区别?

时间:2018-12-25 09:30:23

标签: c sqlite

我正在使用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用于UTF-16字符, sqlite3_bind_text64用于上述各种编码。

对吗?

还有一个问题:

文档说:“如果sqlite3_bind_text()或sqlite3_bind_text16()的第四个参数为负,则字符串的长度为直到第一个零终止符的字节数。”但这并未说明sqlite3_bind_text64将会发生什么。本来我以为这是错字。但是,当我将-1作为第四个参数传递给sqlite3_bind_text64时,总是会出现SQLITE_TOOBIG错误,这使我认为他们是故意从上述语句中删除了sqlite3_bind_text64。正确吗?

谢谢

1 个答案:

答案 0 :(得分:0)

  • sqlite3_bind_text()用于UTF-8字符串。
  • sqlite3_bind_text16()用于使用处理器本机字节序的UTF-16字符串。
  • sqlite3_bind_text64()使您可以指定特定的编码(utf-8,本机utf-16或特定的字节序utf-16)。您可能永远都不需要它。
  • sqlite3_bind_blob()应该用于仅被视为二进制blob的非Unicode字符串;所有sqlite字符串函数仅适用于Unicode。