如果字段是gbk字符集的直接order by
創(chuàng)新互聯(lián)專注于西湖企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站開發(fā),商城開發(fā)。西湖網(wǎng)站建設(shè)公司,為西湖等地區(qū)提供建站服務(wù)。全流程按需網(wǎng)站建設(shè),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
如果是UTF-8字符集,查詢的時(shí)候,通過convert函數(shù),把查詢出來的數(shù)據(jù)使用的字符集gb2312編碼就可以了,然后使用convert之后的中文排序。
如:select name from test1 order by convert(name using gb2312) asc;
排序目標(biāo)是,英文就按首字母的 a,b,c 排,中文則按漢字的首字母排。
最簡(jiǎn)單的排序方法只需要一條 SQL 語(yǔ)句就可以完成:
01 mysql select tag, COUNT(tag) from news GROUP BY tag order byconvert(tag using gbk) collate gbk_chinese_ci;
02 +-----------------+-----------------+
03 | tag | COUNT(tag) |
04 +-----------------+-----------------+
05 | .Net | 3 |
06 | 10000小時(shí) | 1 |
07 | Amazon | 9 |
08 | android | 57 |
09 | C語(yǔ)言 | 1 |
10 | Dennis Ritchie | 2 |
11 | Go語(yǔ)言 | 5 |
12 | IT見解 | 146 |
13 | JavaScript | 4 |
14 | John McCarthy | 1 |
15 | JQuery | 7 |
16 | Zynga | 1 |
17 | 阿里巴巴 | 28 |
18 | 貝爾實(shí)驗(yàn)室 | 1 |
19 | 互聯(lián)網(wǎng) | 24 |
20 | 簡(jiǎn)明現(xiàn)代魔法 | 1 |
21 | 淘寶網(wǎng) | 2 |
22 | 信息圖 | 1 |
23 | 余額寶 | 11 |
24 | 支付寶 | 14 |
25 | 植物大戰(zhàn)僵尸 | 4 |
26 | 自媒體 | 3 |
27 +-----------------+-----------------+
上面是按 gbk 字符集排序的,那么如果按 utf8 又如何呢?
view sourceprint?
01 mysql select tag, COUNT(tag) from news GROUP BY tag order byconvert(tag using utf8) collate utf8_unicode_ci;
02 +-----------------+-----------------+
03 | tag | COUNT(tag) |
04 +-----------------+-----------------+
05 | .Net | 3 |
06 | 10000小時(shí) | 1 |
07 | 12306 | 1 |
08 | C語(yǔ)言 | 1 |
09 | IT見解 | 146 |
10 | Quora | 4 |
11 | Twitch | 1 |
12 | Twitter | 19 |
13 | Zynga | 1 |
14 | 三星 | 3 |
15 | 專利 | 1 |
16 | 余額寶 | 11 |
17 | 開曼群島 | 1 |
18 | 意志力 | 1 |
19 | 植物大戰(zhàn)僵尸 | 4 |
20 | 注意力經(jīng)濟(jì) | 1 |
21 | 簡(jiǎn)明現(xiàn)代魔法 | 1 |
22 | 諾基亞 | 12 |
23 | 諾貝爾獎(jiǎng) | 1 |
24 | 豆瓣 | 3 |
25 | 貝佐斯 | 1 |
26 | 貝爾實(shí)驗(yàn)室 | 1 |
27 | 輕博客 | 3 |
28 | 運(yùn)營(yíng) | 1 |
29 | 量子計(jì)算機(jī) | 1 |
30 | 黑莓 | 1 |
31 +-----------------+-----------------+
PS:ci是 case insensitive, 即 “大小寫不敏感”, a 和 A 會(huì)在字符判斷中會(huì)被當(dāng)做一樣的。
數(shù)字和引文排序是沒問題,但為什么 H黑莓 會(huì)比 L量子計(jì)算機(jī) 靠后呢?這個(gè)在后面的章節(jié)會(huì)慢慢道來。
文本內(nèi)容的排序其實(shí)是按照字符在字符的字典序的,相當(dāng)于是先是數(shù)字,然后是英文字母,英文字母按照a-z的字典序。
對(duì)于中文,也是按照字典序排序的,這個(gè)漢字字典序可以看作是對(duì)應(yīng)拼音的字典序,其實(shí)內(nèi)部是按照字符集中漢字編碼的從小到大順序,只不過漢字的編碼順序是以拼音的字典序排列的,與拼音字典序的主要不同體現(xiàn)在多音字上,對(duì)于一個(gè)漢字雖然可以有多個(gè)發(fā)音,但只有一個(gè)內(nèi)部編碼
SELECT name FROM `user` ORDER BY CONVERT( name USING gbk ) ASC
直接就是按漢字首個(gè)字的首字母排序,自動(dòng)都會(huì)分組了啊。
按姓氏筆畫排序無(wú)須特別設(shè)置,是按漢字姓氏字符的ASCII碼值排序的。
按姓氏筆畫排序,則需單獨(dú)建立一個(gè)字段,自己輸入姓氏的總筆畫數(shù)來供排序用。
order by (字段名) 應(yīng)該可以吧
或者把字段的屬性設(shè)置成binary再試試
如果還是不行 我是沒什么好的主意了 答案補(bǔ)充 其實(shí) select * from 表名 order by name asc 就應(yīng)該可以了
如果不行試試 select * from 表名 order by binary name asc 答案補(bǔ)充 其中 name 為對(duì)應(yīng)的字段名