列数据类型受其他地方的使用影响

时间:2014-03-23 22:33:58

标签: python sqlite

我似乎无法在sqlite或apsw文档中找到对以下行为的引用:

我有一个部分定义的表格并填充为:

CREATE TABLE GeoLoc (lat TEXT, lon TEXT);
INSERT INTO GeoLoc (lat, lon) VALUES ('-33.5533422', '151.23422');

使用apsw获取结果时:

SELECT lat FROM GeoLoc;

我为unicode列获得了正确的lat值类型。但是跑步:

SELECT lat FROM GeoLoc WHERE lat + 0 = lat + 0;

我改为float类型!上面的示例很愚蠢,但在我的实际查询中,我使用lat进行了一些计算,将其转换为浮点类型,但我不希望类型更改在我的查询中无处不在

我存储时依赖lat的确切值。转换为float时,it could change when cast back to string(参见第4.0节)。

注意:我得到了与python的sqlite3模块相同的结果,不是来自以及sqlite3自己的命令行客户端。< / p>

更新这实际上是去年年底推出的bug。感谢CL报告。

2 个答案:

答案 0 :(得分:2)

这是bug,在SQLite版本3.8.3中为introduced。 现在fixed

答案 1 :(得分:0)

在这里回答我自己的问题。实际上当使用sqlite3 CAST时,它似乎工作正常:

SELECT CAST(lat AS TEXT) FROM GeoLoc WHERE lat + 0 = lat + 0;

为了测试它,我使用了一个非常高精度的浮点(例如80个有效数字),并且上面逐字地返回。附加一个空字符串似乎也可以正常工作:

SELECT lat || '' FROM GeoLoc WHERE lat + 0 = lat + 0;

但是,我仍然想知道为什么默认行为是改变所有数据类型。至少从程序员的角度来看,这是不自然的。您只希望在使用点进行自动转换。