SQLite 导出Text的number问题

有一段表结构是这样的,源自SQLite

CREATE TABLE "RemittanceRecord" (
  "transferId" TEXT,
  "locaMsgId" LONG,
  "receiveStatus" INTEGER DEFAULT '-1',
  "isSend" INTEGER,
  PRIMARY KEY ("transferId")
);

然后数据库中存储值如下,主要关注transferId这个主键字段,三条记录中,两条为单纯的数值,一条包含一个字母

transferId                      locaMsgId  receiveStatus    isSend
1000050201201710000502012017112 43376      3                0
100005020120171125130046870865b 81768      3                0
1000050201201711251400463619952 81766      3                0

然后导出数据可以看到SQL语句原文如下:

INSERT INTO "RemittanceRecord" VALUES (1000050201201710000502012017112, 43376, 3, 0);
INSERT INTO "RemittanceRecord" VALUES ('100005020120171125130046870865b', 81768, 3, 0);
INSERT INTO "RemittanceRecord" VALUES (1000050201201711251400463619952, 81766, 3, 0);

这里就出现一个比较麻烦的问题了,本身我的记录存储格式是TEXT,表示为字符串,而导出的部分数据却出现了数值的存储部分,问题就出现,如果开始执行导入操作,结果就是这样的,报错了,而且数据不正确:

INSERT INTO "RemittanceRecord" VALUES (1000050201201710000502012017112, 43376, 3, 0)
> Affected rows: 1
> 时间: 0.091s

INSERT INTO "RemittanceRecord" VALUES ('100005020120171125130046870865b', 81768, 3, 0)
> Affected rows: 1
> 时间: 0.041s

INSERT INTO "RemittanceRecord" VALUES (1000050201201711251400463619952, 81766, 3, 0)
> UNIQUE constraint failed: RemittanceRecord.transferId
> 时间: 0s

实际上,会发现第三条语句之所以出错是由于变成数值之后精度丢失导致的,要修复也是比较容易,看看导入的数据也确实是这样,而如何解决这个问题就相对比较棘手,棘手之处在于对SQLite实在不熟悉,很难找到方向。

1.00005020120171e+30            43376   3   0
100005020120171125130046870865b 81768   3   0

或许,解决方案会很快被找到,希望吧。

2条评论在“SQLite 导出Text的number问题”

写下你最简单的想法