2011-10-09 13 views
1

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列を持っている場合は、テキストdatの長さchar '1'(char '9の後ではなく)の前にchar' 0 'が来るという事実は、ソート順に影響します。

あなたが適切に同じ長さにすべての文字列をパディングすることにより、これを回避することができます

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

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

比較。

+0

3行100,76,22のvarcharのようにDESCは何であり、なぜですか?あなたの言うことが分かった。 –