有一段表结构是这样的,源自SQLite
CREATE TABLE "RemittanceRecord" (
"transferId" TEXT,
"locaMsgId" LONG,
"receiveStatus" INTEGER DEFAULT '-1',
"isSend" INTEGER,
PRIMARY KEY ("transferId")
);
"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
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);
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
> 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
100005020120171125130046870865b 81768 3 0
或许,解决方案会很快被找到,希望吧。
加引号行不行
不太确定,应该要转义才行