【发布时间】:2022-01-03 20:23:52
【问题描述】:
我在 SQLite 数据库中遇到了一个相当奇怪的错误:当通过 ID 号对数据进行排序时,我返回的最小值远高于第二个(事实上,它甚至是最大值)。
我的要求是:
SELECT id FROM myTable ORDER BY id ASC LIMIT 10;
我的返回值是:
id
1. 47196
2. 14421
3. 16419
4. 16420
5. 16421
6. 16422
7. 16423
8. 16424
9. 16425
10. 16426
与“SELECT MIN(id) FROM myTable;”类似的结果,返回 47196
字段 id 定义为 INTEGER PRIMARY KEY。 我正在寻找根本原因。我的猜测是某种形式的损坏,但 SQLite 不会检测到数据库已损坏吗?
按照 Forpas 的想法,我尝试了:
SELECT id FROM myTable ORDER BY TRIM(id) + 0 ASC LIMIT 10;
这确实修复了结果,将 14421 放在首位。
我的 sqlite 版本是 3.6.19
如果有人能解释这意味着什么以及这些事情是如何发生的,我将不胜感激!
【问题讨论】:
-
你确定 id 的数据类型是 int 吗?
-
以防万一运行
SELECT id FROM myTable ORDER BY TRIM(id) + 0 ASC LIMIT 10;的值中有前导空格@ -
我猜你的 id 列包含文字,所以请尝试
SELECT MIN(id), MIN(substr(id, INSTR(id, ' ')+1)) FROM myTable;sqlize.online/… -
由于 TRIM() 修复了问题,这意味着列值包含前导空格。将表格更新为:
UPDATE myTable SET id = TRIM(id)