在mysql默認order by 只對數字與日期類型能夠排序,但對於varchar字符型類型排序好像沒有用了,下面我來給各位同窗介紹varchar類型排序問題如何解決。html
今天在對國家電話號碼錶進行排序的時候發現了一個有趣的問題,我想讓isdcode字段按照由小到大的順序排序,因而乎我是這樣寫的mysql
代碼以下 | 複製代碼 |
SELECT * FROM gb_country_isdcode ORDER BY isdcode ascjquery |
結果以下,發現居然不是我想要的結果,asc排序是對的呀,因而乎我找呀找,找呀找,終於找到緣由了;
isdcode是varcher類型的,若是排序的直接用asc顯然是不行的,必須將他轉換成int類型而後就能夠正常排序了,只要isdcode + 0就能夠了
因而乎這樣寫sql
代碼以下 | 複製代碼 |
SELECT * FROM gb_country_isdcode ORDER BY (isdcode+0) asc數據庫 |
面的呀。好像是想要的那種數據比較大小的了呀。。但是爲何+0就行了呢?函數
jquery1385299511453="204" loaded="true" original="http://filesimg.111cn.net/2013/11/24/20131124133412291.png" />編碼
原來,+0後就轉換INT類型排序了。這樣就能夠按照大小排序了。spa
若是不是電話而是漢字怎麼辦,漢字排序咱們只要進行簡單轉換便可排序了.net
在mysql中使用order by對存儲了中文信息的字段,默認出來的結果並非按漢字拼音的順序來排序,要想按漢字的拼音來排序,須要把數據庫的字符集設置爲UTF8,而後在order by 時候強制把該字段信息轉換成GBK,這樣出來的結果就是按拼音順序排序的。例如:code
代碼以下 | 複製代碼 |
SELECT * FROM table_name ORDER BY CONVERT(column_name USING gbk); |
在mysql中試了一下,結果很使人滿意。
結論是:查詢的時候,經過convert函數,把查詢出來的數據使用的字符集gb2312編碼就能夠了,而後使用convert以後的中文排序。可是若是真的去把表中字段的字符集改爲gb2312,又會涉及到不少編碼的問題,頁面傳值啊,從數據庫中存取啊,很麻煩。只要在查詢的時候,指定一下字符集,並非真的把物理字段改爲gb2312,很簡單。
原文:https://www.cnblogs.com/communist/p/5949680.html