MySQL中對varchar型別排序問題

2021-09-01 20:12:20 字數 1098 閱讀 7898

在今天開發時碰到了這樣的乙個問題:

在資料庫表中有乙個對varchar型別的數值進行desc排序,很簡單的要求吧。可是奇怪的現象出現了。。表中的資料不會根據從高到底進行排序了。。瞬間有點淚奔的感覺呀。。還好經過高手指點啊。所以想和大家分享一下。。希望下乙個mysql初學者以後不要像我一樣了啊。。還是廢話少說,看**吧。。

如:有一張t_testdemo表,其有兩個demoid,demoname欄位,其中demoid是int型別,demoname是varchar型別但是存放的是認為是數值型別的資料,裡面的資料如下:

1,"222222"

2,"33333333"

3,"111111"

4,"2222"

5,"99999"

6,"8888"

7,"11111"

8,"777"

現在有個要求是根據demoname裡面的資料從大到小排序,一看很簡單的嘛,於是很得意的寫下以下sql:

select * from t_testdemo order by demoname desc

可是排序的結果是:

5,"99999"

6,"8888"

8,"777"

2,"33333333"

1,"222222"

4,"2222"

3,"111111"

7,"11111"

完全不是想要的那種根據大小排序的,瞬間有點石化啊。所以下面重點來了:

假如使用下面的sql,會是怎樣呢?

select * from t_testdemo order by (demoname + 0) desc ;

排序結果為:

2,"33333333"

1,"222222"

3,"111111"

5,"99999"

7,"11111"

6,"8888"

4,"2222"

8,"777"

呀。好像是想要的那種資料比較大小的了呀。。可是為什麼+0就好了呢?

原來,+0後就轉換int型別排序了。這樣就可以按照大小排序了。。

寫到這呢。我就不繼續廢話連篇了。。不過還是希望對mysql初學者有那麼一點幫助吧。。

MySQL中對varchar型別排序問題

在資料庫表中有乙個對varchar型別的數值進行desc排序,很簡單的要求吧。可是奇怪的現象出現了表中的資料不會根據從高到底進行排序了瞬間有點淚奔的感覺呀還好經過高手指點啊。所以想和大家分享一下希望下乙個mysql初學者以後不要像我一樣了啊還是廢話少說,看 吧 如 有一張t testdemo表,其有...

mysql關於char和varchar型別的區別

在mysql中,字串型別中的char屬於有固定長度的字串型別 二varchar型別屬於可變長度的字串型別 如何理解固定長度和可變長度呢?固定長度指 當長度設定為4時,長度是固定的 當實際值只有1位時,會自動用空格補足4位 可變長度指 當長度設定為4時,長度是隨著實際值為改變,最長為4 當實際值只有1...

MySql中varchar和varchar的區別

看了新公司的資料庫設計,有些問題思考了一下,寫這篇文章也就記錄這個問題的思考過程。首先從占用空間進行比較,varchar 10 宣告10個位元組,資料儲存時額外乙個位元組的長度字首 varchar 1000 宣告1000個位元組,如果資料長度大於255,長度字首是兩個位元組。而實際varchar資料...