为什么在反向编辑后 Sqlite 校验和不一样?
why is Sqlite checksum not same after reversing edits?
显然,编辑任何列值都会更改校验和。
但将原始值保存回来不会 return 文件恢复为原始校验和。
I 运行 VACUUM 之前和之后所以这不是由于缓冲区大小。
我没有任何引用该列的索引,也没有添加或删除行,因此 pk 索引也不需要更改。
我尝试关闭回滚日志,但这是一个单独的文件,所以我并不感到惊讶它没有效果。
我不知道内部日志或修改日期可以解释为什么相同的内容不会产生相同的文件字节。
寻找对文件内部发生的事情的洞察力来解释这一点,以及是否有办法使其正常运行(我没有看到相关的 PRAGMA)。
g运行ted https://sqlite.org/dbhash.html 的存在是为了解决这个问题,但我没有看到任何这些条件被触发“......等等”是一个非常模糊的原因
数据库文件包含 (the equivalent of) a timestamp of the last modification 以便其他进程可以检测到数据已更改。
在数据库文件中还有很多其他的东西可以改变(例如,页面的顺序、B 树结构、未使用部分的随机数据)而不会在 [=19 处看到的数据差异=]等级.
如果您想在 SQL 级别比较数据库,您必须比较该数据的规范 SQL 表示,例如 .dump
输出,或者使用专门的dbhash
.
等工具
显然,编辑任何列值都会更改校验和。 但将原始值保存回来不会 return 文件恢复为原始校验和。
I 运行 VACUUM 之前和之后所以这不是由于缓冲区大小。 我没有任何引用该列的索引,也没有添加或删除行,因此 pk 索引也不需要更改。 我尝试关闭回滚日志,但这是一个单独的文件,所以我并不感到惊讶它没有效果。
我不知道内部日志或修改日期可以解释为什么相同的内容不会产生相同的文件字节。
寻找对文件内部发生的事情的洞察力来解释这一点,以及是否有办法使其正常运行(我没有看到相关的 PRAGMA)。
g运行ted https://sqlite.org/dbhash.html 的存在是为了解决这个问题,但我没有看到任何这些条件被触发“......等等”是一个非常模糊的原因
数据库文件包含 (the equivalent of) a timestamp of the last modification 以便其他进程可以检测到数据已更改。
在数据库文件中还有很多其他的东西可以改变(例如,页面的顺序、B 树结构、未使用部分的随机数据)而不会在 [=19 处看到的数据差异=]等级.
如果您想在 SQL 级别比较数据库,您必须比较该数据的规范 SQL 表示,例如 .dump
输出,或者使用专门的dbhash
.