无自定义排序规则环境下,如何访问含自定义collation的SQLite数据库?
为什么全表查询也会失败
SQLite中,带自定义排序规则的TEXT类型主键会生成对应的聚簇索引,而这个索引是表数据存储的核心——所有表数据都依赖该索引的排序逻辑来组织。当你在未注册my_collation的环境打开数据库时,哪怕是全表查询,SQLite也需要通过这个主键索引遍历数据,但它找不到对应的排序规则来解析索引结构,直接抛出"Parse error: no query solution"错误,无法正常读取表内容。
数据导出方法
方法1:临时注册同名占位规则(最便捷)
在sqlite3 CLI中,先临时注册一个和原规则同名的简单排序规则,只要名字匹配,就能让SQLite正常识别表结构:
-- 打开数据库后立即执行 CREATE COLLATION my_collation AS BINARY; -- 此时可正常查询数据 SELECT * FROM foo; -- 若要导出为CSV文件,继续执行以下命令 .mode csv .output foo_export.csv SELECT * FROM foo; .output stdout
方法2:备份数据库后在合规环境导出
如果临时注册规则无效,直接用sqlite3的备份命令复制整个数据库,拿到能注册my_collation的环境中恢复后再导出:
# 在终端执行,将目标数据库备份为backup.db sqlite3 your_database.db ".backup backup.db"
内容的提问来源于stack exchange,提问作者yuri kilochek
相关产品推荐
相关产品推荐

