這是一個有趣的事情,它只發生在一個數據庫文件,而不是與我有任何其他人。我解決了這個問題,但認爲這很有趣。Sqlite奇怪的排序順序
我有一個表 -
<partial table>
CREATE TABLE [horsestats] (
[horseID] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
[name] VARCHAR(30) NULL,
[flatrating] INTEGER DEFAULT '0' NULL
);
所有在表中的零個值由默認值設定,其他任何已通過我的軟件設置。大約70%的記錄具有設定值。所以,如果我們運行這個 -
Select horsestats.flatrating FROM horsestats WHERE horsestats.flatrating<>0 ORDER BY horsestats.flatrating DESC LIMIT 20;
我們真的不希望這樣 -
flatrating 0 0 0 etc
其實只有0列值,但沒有說是不是零值都在輸出。如果我們反轉它,我們可能會期望只有不爲0的值被列出:
Select horsestats.flatrating FROM horsestats WHERE horsestats.flatrating=0 ORDER BY horsestats.flatrating DESC LIMIT 20;
但是,沒有記錄返回。
那麼,這一個讓我們(這是我開始的地方,因爲它是第一套,我的軟件需求):
Select horsestats.flatrating FROM horsestats ORDER BY horsestats.flatrating DESC;
我敢打賭,你的襪子,你猜錯了。它得到這個:
flatrating 0 0 0 0 130 128 127 126 125 124 124
正如我所說,這不會發生在我有任何其他數據庫或表。我現在要通過隱含地將零的所有值設置爲零來修復它,我懷疑這樣做是正確的。
事實上,它沒有,如果我跑:
UPDATE horsestats SET horsestats.flatrating='0' WHERE horsestats.flatrating='0';
問題仍然存在,所以它看起來像我必須編寫數據庫文件關閉的腐敗。在這種情況下,可以,因爲我必須從軟件的預加載中加載其他地方的大部分數據。
所以問題是爲什麼?
Sqlite可以做一個奇怪的混合的ansi和數字排序嗎?我唯一能想到的就是給出這個排序順序,但是這個表中的值零也不是數值上的零,儘管一旦它傳遞給我的軟件,它的行爲就像預期的那樣。