使用MySql 實現(xiàn)微信好友排序

昵稱排序順序要求

<ol>
<li>大小寫英文字母排序排在前面</li>
<li>中文按拼音排序</li>
<li>數(shù)字,符號以及emoji符號</li>
</ol>

實現(xiàn)思路 :

1.按照昵稱首字符的unicode 值進行排序鞋吉。(解決第一點需求)
根據(jù)unicode編碼對照表, 大小寫英文字母的范圍為 (十進制) 65 ~ 122商蕴,而數(shù)字以及常用標(biāo)點符號則在 (十進制)65以下。
所以需要處理的就只有65以下的編碼符號,將這些編碼的符號提升比中文要高的位置即可(這里只是考慮到昵稱只含有中文造壮,而不包含韓文覆履,日文其他語言的字符)。

2.MySql拼音排序方法
在MySql 里是通過gbk字符進行拼音排序的。
所以需要將排序的字段nickname 轉(zhuǎn)換成gbk進行排序硝全。
order by convert(nickname using gbk) asc 方法栖雾。

mysql 通常儲存格式為utf8 ,如果有emoji 標(biāo)簽符號數(shù)據(jù)伟众,則使用utf8mb4格式析藕。
(注:utf8最多只支持3個字節(jié),即3*8位,而emoji 長度最長會超過3個字節(jié),utf8mb4就是utf8 的超集, 擴展了utf8的可變長度 )

3.查詢gbk 拼音為z的最后一個漢字
根據(jù)gbk編碼范圍B0A1-F7FE,創(chuàng)建一張用于存儲所有g(shù)bk編碼漢字的表。編寫以下存儲過程實現(xiàn)上述操作:

<pre>

set @gbkStart = conv(hex(0xB0A1),16,10);
set @gbkEnd = conv(hex(0xF7FE),16,10);

set @i = @gbkStart;

drop table if exists t_gbk;
create table t_gbk(
charcode varchar(200),
charword varchar(10)

) charset gbk;

-- 插入gbk漢字
while @i<=@gbkEnd do

set @charcode = conv(@i,10,16);
set @charword = convert(unhex(@charcode) using gbk);
set @i = @i+1;

insert into t_gbk(charcode,charword) values(@charcode,@charword);

end while;

</pre>

查找最后一個拼音為Z的漢字: "糳" gbk編碼為 BC64
(注意這個gbk字符集所認可的 bc64 為"糳")
<pre>
select * from t_gbk order by charword desc
</pre>

111.png

SQL實現(xiàn):

<pre>
-- 拼音z排序最后的漢字:糳 utf8編碼為 \xe7\xb3\xb3(即0xe7b3b3),gbk編碼為BC64
-- 0x41 即十進制65 大寫字母A
select nickname,hex(left(nickname,1)) as raw_charcode,
convert(
unhex(
case
when hex(left(nickname,1))<hex(0x41) then hex(0xe7b3b3) -- 如果是少于英文字母編碼則轉(zhuǎn)換對應(yīng)的漢字 "糳"
when
left(nickname,1)>=0xf09f9880 -- 0xf09f9880 表示 emoji 表情??凳厢,utf8編碼為 \xf0\x9f\x98\x80 (即0xf09f9880)
then hex(0xe7b3b3) --將emoji表情轉(zhuǎn)換對應(yīng)的漢字 "糳"
ELSE hex(left(nickname,1))
end
)
using utf8)
as HanZi

from user
order by
convert(HanZi using gbk) asc, -- 這一步已經(jīng)能把emoji表情符號账胧,非中英文的符號排序到最后,
raw_charcode asc -- 由于emoji 是在原有漢字庫基礎(chǔ)上再出的,所以它的編碼值肯定比基礎(chǔ)編碼范圍要大先紫,這樣就可以把emoji排在最后

</pre>
** 注:0x41 即十進制65 大寫字母A **

<br ><br ><br >

參考:

查了一下漢字unicode 編碼,編碼為 16進制4E00 ~ 9FBF,
<strong>(注意是 Unicode編碼而不是utf8編碼)</strong>
具體編碼范圍可以從這里查詢:
http://wenku.baidu.com/link?url=r5dvL7MInjkYzO53qJRCO8V-i1REylaGfoU31QCoy53U3OeeEGl-uD3s1PaZJDuxwjX17H7bwS0sFDzt9N0boW0NQdbDetJK3HV32jgUkjq


http://www.qqxiuzi.cn/zh/hanzi-unicode-bianma.php

由于這里只考慮昵稱只含有中文,所以只需要將65以下的編碼符號提升大于最后中文的編碼(即9FBF)即可治泥。由于9FBF為unicode, 并且mysql 存儲的是utf8,所以需要把9FA5轉(zhuǎn)換成utf8編碼。最簡單的轉(zhuǎn)換方式:在上面鏈接里找到9FA5對應(yīng)的中文字,黏貼到文本里居夹,然后以utf8格式保存准脂,最后以16進制查看該文件的內(nèi)容。

也可以在python里將最后一個中文字轉(zhuǎn)換為utf8:
<pre>
s = u"\u9FBF";
s.encode("utf-8"); //輸出 '\xe9\xbe\xbf', 去掉\x前綴 即 e9bebf
</pre>

注: \u 表示unicode 編碼 , \x 表示utf-8 編碼

<br >

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子院塞,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異元旬,居然都是意外死亡坑资,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人西潘,你說我怎么就攤上這事∑沸眨” “怎么了?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么囱淋? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任芦倒,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘跟衅。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著败晴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪僚祷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天蜕琴,我揣著相機與錄音,去河邊找鬼雏搂。 笑死而昨,一個胖子當(dāng)著我的面吹牛植袍,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播或链,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼叼耙,長吁一口氣:“原來是場噩夢啊……” “哼癞松!你這毒婦竟也來了首尼?” 一聲冷哼從身側(cè)響起软能,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎举畸,沒想到半個月后抄沮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體跋核,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡刻伊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年谦炬,在試婚紗的時候發(fā)現(xiàn)自己被綠了键思。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片础爬。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出供炎,到底是詐尸還是另有隱情渴逻,我是刑警寧澤,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布音诫,位于F島的核電站惨奕,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏竭钝。R本人自食惡果不足惜梨撞,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望香罐。 院中可真熱鬧卧波,春花似錦、人聲如沸庇茫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽旦签。三九已至查坪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間宁炫,已是汗流浹背咪惠。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留淋淀,地道東北人遥昧。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像朵纷,于是被迫代替她去往敵國和親炭臭。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容