我正在使用 sqlite3 C 接口(interface)。在 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。对吗?
谢谢
最佳答案
sqlite3_bind_text()
用于 UTF-8 字符串。sqlite3_bind_text16()
适用于使用处理器 native 字节顺序的 UTF-16 字符串。sqlite3_bind_text64()
允许您指定特定的编码(utf-8、 native utf-16 或特定的字节序 utf-16)。您可能永远不需要它。sqlite3_bind_blob()
应用于仅被视为二进制 blob 的非 Unicode 字符串;所有 sqlite 字符串函数仅适用于 Unicode。
关于c - sqlite3_bind_text、sqlite3_bind_text16 和 sqlite3_bind_text64 之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53921051/