2011-10-09 87 views
1

爲什麼當我有一個像(收視率= VARCHAR)SQL的Varchar訂購

A - 100 
B - 70 
C - 30 

然後記錄

SELECT * FROM `videos` ORDER BY `rating` DESC 

給人

A - 30 
B - 70 
C - 100 

SELECT * FROM `videos` ORDER BY `rating` ASC 

給人

A - 100 
B - 70 
C - 30 

但是,當(收視率= TINYINT)

SELECT * FROM `videos` ORDER BY `rating` DESC 

給人

A - 100 
B - 70 
C - 30 
+0

我看不出第一個和最後一個查詢之間的差異 – Dzoki

+0

我將評級列從varchar更改爲tinyint,修復了它。我想知道爲什麼。 –

+0

阿哈抱歉,我沒有看到它的lmao。 – Dzoki

回答

0

你可以試試:

SELECT * FROM videos ORDER BY rating, videos DESC 
+0

我已經找到了解決方案,我只想知道爲什麼當列是varchar時它不起作用,以及何時它的tinyint起作用。 –

2

當你有一個VARCHAR列,文本數據的長度a和char'0'在char'1'之前(而不是char'9'之後)會影響排序順序。

例如比較

select '100' as col1 
union all 
select '70' as col1 
order by col1 asc 

select '100' as col1 
union all 
select '070' as col1 
order by col1 asc 

您可以通過適當地填充所有字符串的長度相同解決這個問題。

+0

所以作爲varchar 3行100,76,22。DESC會是什麼,爲什麼?我不知道你說了什麼。 –