c++ - 在 sqlite3 语句中绑定(bind) 'unsigned long' (uint64)? C++

标签 c++ sqlite bind unsigned-integer

我正在使用 sqlite.org 上提供的 sqlite3 库。 .

我有一些未签名的 long 想要存储在数据库中。我不想自己构建查询并将其留给某种注入(inject)(无论它是否是偶然的)。因此,我使用 sqlite_bind_*功能来“清理”我的参数。

问题是无符号长整数没有函数类型,只有整数。

int sqlite3_bind_int(sqlite3_stmt*, int, int);

int sqlite3_bind_int64(sqlite3_stmt*, int, sqlite3_int64);

如果我无法以无符号方式存储它们,我肯定会有数字溢出。

我需要自己管理吗? (即从数据库中选择后转换为无符号类型或在插入数据库之前转换为有符号类型)

如果我必须自己管理这个问题,当比较实际上是在无符号范围内时,如何执行一些存储为有符号长整数的比较查询?

INTEGER datatypes得到转换,人们会认为 unsigned long 可以毫无问题地表示。

如果有其他解决方案,请赐教! 谢谢!

最佳答案

SQLite 数据库无法在其中存储无符号 64 位整数。这只是数据的限制。

您的选择是:

  • 将其存储为字符串,并根据需要进行转换。
  • 将其存储为二进制 blob,并根据需要进行转换。
  • 假设它是一个带强制转换的有符号 64 位整数,因此可以根据需要进行转换。
  • 将两条信息存储为两列:无符号 63 位整数(低 63 位)和表示高位的值。

由于这些是哈希,您可能不关心除相等测试之外的比较。所以这些方法中的大多数都适合你。

关于c++ - 在 sqlite3 语句中绑定(bind) 'unsigned long' (uint64)? C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8496730/

相关文章:

c++ - 添加std::valarray的大小不同,操作数顺序也不同

c++ - 这个 "denormal data"是关于什么的? - C++

此 delete[] 错误的 C++ 解释?

sql - 计数值表的出现

c++ - 如何修复 'Cannot assign requested address?'

jquery - 选择select,如何将多个值放入$bind数组中

javascript - 根据用户输入过滤 .csv 数据并刷新 d3.js map

c++ - 如何查看降低的c++

sql - 一个 SQLite 查询中的两个总和和三个表

java - 在 SQLite 数据库中搜索