mysql進階(八)怎么對varchar類型排序問題

MySQL中怎么對varchar類型排序問題

asc?升級

desc降序

在MySQL默認order?by?只對數字與日期類型可以排序,但對于varchar字符型類型排序好像沒有用了,下面我來給各位同學介紹varchar類型排序問題如何解決。

今天在對國家電話號碼表進行排序的時候發現了一個有趣的問題,我想讓isdcode字段按照由小到大的順序排序,于是乎我是這樣寫的

SELECT?*?FROM?gb_country_isdcode?ORDER?BY?isdcode?asc

結果如下,發現竟然不是我想要的結果,asc排序是對的呀,于是乎我找呀找,找呀找,終于找到原因了;

isdcode是varcher類型的,如果排序的直接用asc顯然是不行的,必須將他轉換成int類型然后就可以正常排序了,只要isdcode?+?0就可以了

于是乎這樣寫

SELECT?*?FROM?gb_country_isdcode?ORDER?BY?(isdcode+0)?asc

好像是想要的那種數據比較大小的了呀。。可是為什么+0就好了呢?原來,+0后就轉換INT類型排序了。這樣就可以按照大小排序了。

如果不是電話而是漢字怎么辦,漢字排序我們只要進行簡單轉換即可排序了。

在mysql中使用order?by對存儲了中文信息的字段,默認出來的結果并不是按漢字拼音的順序來排序,要想按漢字的拼音來排序,需要把數據庫的字符集設置為UTF8,然后在order?by?時候強制把該字段信息轉換成GBK,這樣出來的結果就是按拼音順序排序的。例如:

SELECT?*?FROM?table_name?ORDER?BY?CONVERT(column_name?USING?gbk);

在mysql中試了一下,結果很令人滿意。

結論是:查詢的時候,通過convert函數,把查詢出來的數據使用的字符集gb2312編碼就可以了,然后使用convert之后的中文排序。但是如果真的去把表中字段的字符集改成gb2312,又會涉及到很多編碼的問題,頁面傳值啊,從數據庫中存取啊,很麻煩。只要在查詢的時候,指定一下字符集,并不是真的把物理字段改成gb2312,很簡單。

以上就是的內容,更多相關內容請關注PHP中文網(www.php.cn)!

? 版權聲明
THE END
喜歡就支持一下吧
點贊11 分享