我的应用程序出现问题,因为SQLite以某种方式改变了默认排序顺序的行为。
直到SQLite 3.7.5(至少)当查询没有" ORDER BY"子句,结果按rowid排序。现在使用SQLite 3.8.6,它们按主键排序。
SQLite 3.7.5:
select rowid, id, name from users;
rowid id name
--------------------
1 10 John
2 15 Peter
3 11 Mary
4 14 Sam
SQLite 3.8.6:
select rowid, id, name from users;
rowid id name
-------------------
1 10 John
3 11 Mary
4 14 Sam
2 15 Peter
我有无数的查询需要更改,我只需添加" ORDER BY ROWID"。
SQLite是否有一个参数,我可以将默认排序顺序设置回ROWID?
答案 0 :(得分:2)
如果SELECT省略了ORDER BY子句,SQLite不保证结果的顺序。即便如此,结果的顺序也不会从一次运行变为另一次运行,因此许多应用程序错误地依赖于任意输出顺序,无论顺序是什么。但是,有时新版本的SQLite将包含优化器增强功能,这些增强功能将导致没有ORDER BY子句的查询的输出顺序发生变化。发生这种情况时,依赖于某个输出顺序的应用程序可能会发生故障。