作者:幸福的小兔子3 | 来源:互联网 | 2023-02-01 03:34
我的sqlite数据库有问题。
首先,我的数据库以某种方式崩溃,无论我要如何处理它,都说:“数据库磁盘映像格式错误”。可能是因为我在表中的两列中编写了带有大量“ \ n”的巨大文本。
因此,我在这里和其他站点上阅读了一些主题,然后尝试转储db并重新创建它,但是它说的是“行太长(最多1000个字符)”之类的东西-现在我无法重新创建此错误。但是很奇怪的是,我正在使用sqlite3的3.19.3版本,在这里我读到另一个线程,在以前的版本中,“ \ n”字符的问题已解决。
现在,我的另一种方法是我查看了转储文件并使用正则表达式删除了所有这些文本。现在,我的转储文件的大小从750 Mb减小到了3.5 Mb。当我尝试从新的转储文件和旧的(这个大文件)重新创建db时,结果是一个空文件。控制台不会为我提供任何结果或错误。因此,下面我将发布流程中的每一步。
sqlite3> .open testDatabase.sqlite
sqlite3> .mode insert
sqlite3> .output dump.sql
sqlite3> .exit
mv testDatabase.sqlite corruptDatabase.sqlite
sqlite3> .open testDatabase.sqlite
sqlite3> .read dump.sql
要么
*gets rid of huge text values*
sqlite3> .open testDatabase.sqlite
sqlite3> .read small_dump.sql
两者都导致一个空的testDatabase.sqlite文件。如前所述,没有错误,所以我不知道发生了什么。
请帮助,我不知道该怎么办。
1> CL...:
当.dump
命令遇到损坏的数据库时,它会输出SQL命令(只要可以生成SQL命令),然后输出ROLLBACK命令以防止创建不完整的数据库。
如果您确实要从转储文件中获取不完整的数据,请对其进行编辑,然后从
ROLLBACK; -- due to errors
至
COMMIT;