2019-12-11對varchar型別排序問題的解決
在mysql默認order by 只對數字與日期型別可以排序,但對于varchar字符型型別排序好像沒有用了,下面我來給各位同學介紹varchar型別排序問題如何解決,
現象描述:
select * from resultgroup where upUser = 'kkk' order by patientId desc

為什么會出現這種現象呢?就是因為 patientId 是varchar型別的 而order by 排序只針對數字 跟日期排序的,所以會出現上述現象,
解決辦法:
1.把varchar型別欄位加上0變成int型別就ok,
select * from resultgroup where upUser = 'kkk' order by patientId+0 desc

2.用mysql自帶的方法 把varchar強轉,CAST/CONVERT
mysql為我們提供了兩個型別轉換函式:CAST和CONVERT,現成的東西我們怎能放過?
CAST() 和CONVERT() 函式可用來獲取一個型別的值,并產生另一個型別的值,
這個型別 可以是以下值其中的 一個:
BINARY[(N)]
CHAR[(N)]
DATE
DATETIME
DECIMAL
SIGNED [INTEGER]
TIME
UNSIGNED [INTEGER]
所以我們可以用CAST解決問題:
select * from resultgroup where upUser = 'kkk' order by cast(patientId as signed ) desc

也可以使用CONVERT來搞定此問題:
select * from resultgroup where upUser = 'kkk' order by convert(patientId , signed ) desc

3.如果不是電話而是漢字怎么辦,漢字排序我們只要進行簡單轉換即可排序了
在mysql中使用order by對存盤了中文資訊的欄位,默認出來的結果并不是按漢字拼音的順序來排序,要想按漢字的拼音來排序,需要把資料庫的字符集設定為UTF8,然后在order by 時候強制把該欄位資訊轉換成GBK,這樣出來的結果就是按拼音順序排序的,例如:
SELECT * FROM table_name ORDER BY CONVERT(column_name USING gbk);
結論是:查詢的時候,通過convert函式,把查詢出來的資料使用的字符集gb2312編碼就可以了,然后使用convert之后的中文排序,但是如果真的去把表中欄位的字符集改成gb2312,又會涉及到很多編碼的問題,頁面傳值啊,從資料庫中存取啊,很麻煩,只要在查詢的時候,指定一下字符集,并不是真的把物理欄位改成gb2312,很簡單,
到這里對varchar型別排序問題就解決了,,,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/95833.html
標籤:MySQL
上一篇:MySQL的join使用
下一篇:mysql5.7 gruop by報錯this is incompatible with sql_mode=only_full_group_by
