【问题标题】:SQLite column with affinity TEXT still stores long number as INTEGER具有亲和力 TEXT 的 SQLite 列仍将长数存储为 INTEGER
【发布时间】:2018-01-25 14:08:49
【问题描述】:

我有一个名为deliverysimp 的表,我试图在其中插入一些数据。我知道列的数据类型只是关联而不是限制,但是我需要将下面的parcelid 列存储为TEXT

CREATE TABLE IF NOT EXISTS deliverysimp (parcelid TEXT, expected integer, primary key (parcelid))

我正在使用以下 javascript 将数据插入数据库:

context.executeSql("INSERT INTO deliverysimp(parcelid, expected) values(?,?)",
    [
    '' + delivery.parcelid,
    delivery.expected
    ], function () { }, me.ErrorHandler);

你可以看到我已经尝试在parcelid之前添加一个空白'' +来尝试强制亲和力,但是没有行为是一样的;即:

如果我尝试存储 parcelid 33333333333322222222222222222222223,它将以 3.3333333333322223e+34 的形式存储到数据库中,我需要将其作为文本/字符串表示形式。

有什么想法可以让 SQLite 将其命名为 TEXT

【问题讨论】:

  • JavaScript 很乐意将+ 解释为数字相加。试试toString()

标签: sqlite


【解决方案1】:

我怀疑您已经有一个字符串,只是不是您期望的字符串。由于您拥有的数字不能用 8 字节整数表示,因此将其转换为实数,而 that 将转换为字符串,即 '3.3333333333322223e+34'。因此,如果您希望该值是 '33333333333322222222222222222222223',那么这就是您必须插入到表中的值。

要检查,请使用sqlite3 命令行工具执行SELECT parcelid, TYPEOF(parcelid) FROM deliverysimp; 并查看您得到的结果。

【讨论】:

  • 你是对的。当我回到函数的初始化并检查传入的参数时,parcelid 已经设置为3.3333333333322223e+34,所以我需要在代码的前面找到罪魁祸首。帮助查明错误的好建议,谢谢。
  • @RussAwesome:很高兴能帮上忙。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-21
  • 1970-01-01
  • 2017-01-10
相关资源
最近更新 更多