2014-11-03 34 views
0

我有一個表,其中一列是數據類型varchar。下面是一些值:MySQL是否將Varchars視爲絕對值?

-.001 
-.010 
-7.13 

當我降序排序,它給了我這樣的:

-7.13 
-.010 
-.01 

這是倒退,但如果你的數字的絕對值是正確的。同樣,如果我爲這些數字的最大值運行查詢,它會給我-7.13。

MySQL是否爲varchar做了什麼?

(PS我使用的續集專業的是Mac,有時有一些有趣的設置上。莫非是什麼原因呢?)

回答

2

號VARCHAR處理按字母順序排序,這將(單個字符)對應以ASCII編碼。在ASCII編碼中(見here),週期爲「46」,小於0,即「48」。

換句話說,您的值只是按照他們的角色所說的順序排序。

如果你想要一個數字排序,那麼你可以使用+ 0進行無聲轉換爲一個數字(「沉默」意味着錯誤被忽略)。那就是:

order by col + 0 desc 
+0

謝謝。所以如果我在做一個案例的時候我會說:「一個<-.78的案例」會真的給我正確的價值嗎?或者它會給我0的值呢? – japem 2014-11-03 02:55:43

+0

MySQL將正確處理該聲明。它是否做你想要的取決於你的期望。 MySQL會在需要數字的上下文中將字符串轉換爲數字。在這種情況下,如果「a」不是一個數字,它將被轉換爲數字。 – 2014-11-03 02:59:10