Android SQLite中的TEXT vs BLOB在坐标值上的应用区别

10

我有一个SQLite数据库,其中包含一个表格,该表格包含一个大型折线的坐标(约2000个字符)。数据库的结构如下:

CREATE TABLE "province" (
    `_id`   INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
    `_line` TEXT,
);

_line的值的格式为:

lat1,lon1;lat2,lon2;lat3,lon3;lat4,lon4 ...

一个小例子:

28.164033,-15.709076;28.151925,-15.699463;28.134972,-15.703583;28.121650,-15.707703;28.107115,-15.704956;28.079250,-15.713196;28.067133,-15.735168

sqlite text vs blob

现在,在SQLite Android数据库中,_line字段是TEXT类型。在我的DAO类中,我将此字符串解析为一个点列表的ArrayList。

我的问题是,建议将_line数据类型从TEXT更改为BLOB吗?这样会提高性能吗?


2
为什么不使用正常方式?...第二个表格? 表province_boundary,列:pk_id,fk_province_id,lat,lng... - Selvin
1
因为可能维护工作会变得非常困难。 - albertoiNET
1
BLOB代表“二进制大对象数据”(主要用于存储图片)。 - Phantômaxx
1个回答

15

在数据库本身中,TEXT和BLOB值以完全相同的方式存储。唯一的区别是向应用程序报告的类型,或者内置字符串函数的行为不同。

然而,Android框架会自动在数据库编码(UTF-8)和Java字符串编码(UTF-16)之间转换TEXT值。对于BLOB值,则不会进行此转换。

如果您将值存储为blobs,则可以以与存储在那里相同的格式从数据库中读取它们,但存在风险,即该格式为UTF-16,这将浪费大量空间。


1
查询一个表,其中有200多行,每一行的最后一列都填充了500kb-1.5MB的文本,如果将这些大文本存储为文本或二进制大对象(blob),是否会对性能产生影响? - Ewoks
1
如果编码相同,则不需要。 - CL.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接