Mysql相關知識總結 持續更新

2022-03-10 03:47:37 字數 1727 閱讀 7903

在mysql預設order by 只對數字與日期型別可以排序,但對於varchar字元型型別排序好像沒有用了,下面我來給各位同學介紹varchar型別排序問題如何解決。

現象描述:  

select

*from resultgroup where upuser =

'kkk

'order

by patientid desc

為什麼會出現這種現象呢?就是因為patientidvarchar型別的 而order by 排序只針對數字 跟日期排序的。所以會出現上述現象。

1.把varchar型別字段加上0變成int型別就ok。

select

*from resultgroup where upuser =

'kkk

'order

bypatientid+

0desc

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

bycast(patientid as signed )

desc

也可以使用convert來搞定此問題:

select

*from resultgroup where upuser =

'kkk

'order

byconvert(patientid , signed )

desc

3.如果不是**而是漢字怎麼辦,漢字排序我們只要進行簡單轉換即可排序了

在mysql中使用order by對儲存了中文資訊的字段,預設出來的結果並不是按漢字拼音的順序來排序,要想按漢字的拼音來排序,需要把資料庫的字符集設定為utf8,然後在order by 時候強制把該字段資訊轉換成gbk,這樣出來的結果就是按拼音順序排序的。例如:

select

*from table_name order

byconvert(column_name using gbk);

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

到這裡對varchar型別排序問題就解決了。。。

Mysql 相關(持續更新)

查詢某個資料庫中表個數的sql語句 select count tables,table schema from information schema.tables where table schema db name group by table schema 檢視自己的mysql資料庫支援的引擎有...

MySQL知識整理 持續更新)

mysql的基本資料型別 資料庫物件table view sequence index synonym 資料庫裡的表 使用者表和資料字典 監聽及其開啟關閉監聽 mysql的select語法及其相關應用 基本查詢select from 帶條件表示式的查詢 排序查詢結果 定義列的別名 空置處理 消除重覆...

總結點mysql的相關 函式 不持續更新

字串型字段 straaa 表名 tbl str 執行語句 1 不用任何連線符將該字段連線 select group concat straaa separator from tbl str where 1 2 使用連線符將該字段連線 預設為逗號 select group concat straaa ...