HarmonyOS鸿蒙Next中RdbStore单条数据大小的疑问

HarmonyOS鸿蒙Next中RdbStore单条数据大小的疑问 文档中内容如下:

向目标表中插入一行数据,使用callback异步回调。由于共享内存的大小限制为2MB,因此单条数据的大小也必须严格小于2MB。如果单条数据超过此限制,在后续通过RdbStore的queryquerySql接口获取ResultSet后,调用getValuegetString等get方法时将无法成功获取数据,并可能导致操作失败或抛出异常。

单条字符串类型字段最大支持写入8MB,超出部分将被截断,仅保留前8MB数据,若需存储超过8MB的内容,建议使用blob类型。

这里的2MB和8MB指的什么?为什么小于2MB了又支持写入8MB?


更多关于HarmonyOS鸿蒙Next中RdbStore单条数据大小的疑问的实战教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

开发者您好,这是数据库的两个特性,即写入支持的大,读取支持的小。所以最终建议是以最大2MB作为限制,因为介于2MB至8MB的字符串类型字段数据虽然可以正常调用insert方法成功存储,但是无法正常读取,也是不能使用的。

更多关于HarmonyOS鸿蒙Next中RdbStore单条数据大小的疑问的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


蹲一个答案

HarmonyOS Next 中 RdbStore 单条数据大小受底层 SQLite 限制,默认页面大小为 4KB,单行记录最大约 1MB(1,000,000 字节)。超过该值会导致插入失败或异常。

HarmonyOS Next 的 RdbStore 文档中提到的 2MB 和 8MB 是两个不同维度的限制:

  • 2MB 指单条记录整行的序列化大小上限,源于数据库结果集在进程间传递时使用的共享内存限制(2MB)。若某行数据序列化后的总大小 ≥ 2MB,后续通过 ResultSetgetValue/getString 等方法读取时就会失败,因为无法将整行装入共享内存。
  • 8MB 是字符串(TEXT)类型字段的最大存储容量,即单个 TEXT 字段最多可写入 8MB,超出部分会被截断。这是针对该字段本身的存储限制,与整行传输限制无关。

两者看似矛盾实则不冲突:你可以往一个 TEXT 字段写入 8MB 数据,但只要该行的总序列化大小超过 2MB(例如该字段再加上其他列的开销),查询时就会因共享内存限制而无法正常获取该行数据。因此文档中才建议超大内容改用 BLOB 类型(但 BLOB 行同样受 2MB 整行限制),实际上无论哪种类型,都应确保单行总数据量严格小于 2MB,否则写入虽然可能成功,查询会失败。

回到顶部