如果存儲漢字的字段代碼使用GBK字符集,因為GBK的內部代碼本身使用拼音排序方法(3755個常用的壹級漢字按拼音排序,而二級漢字不按拼音排序,但考慮到人名等都是常用漢字,只正確排序壹級漢字就足夠了),直接添加排序by就足夠了嗎?姓名ASC,查詢結果將按姓氏升序排序;如果存儲姓名的字段使用utf8字符集,則該字段需要在排序時進行代碼轉換,相應的代碼為Order by Convert(姓名使用GBK)ASC。同樣,查詢結果按姓氏升序排序。
按拼音首字母顯示時,需要使用中間表存儲字母對應的漢字編碼範圍。在這種情況下,可以每次都拿出漢字與中間表進行比較。用於在中間表中創建和插入數據的SQL如下:
/*
Navicat?MySQL?數據?轉移
目標?服務器?類型:?關系型數據庫
目標?服務器?版本?:?50617
文件?編碼?:?65001
日期:?2015-07-02?11:12:15
*/
設置?FOREIGN _ KEY _ CHECKS = 0;
- ?-
- ?桌子?結構?為了什麽?t_coslers
- ?-
滴?桌子?如果?存在嗎?` t _ coslers
創造?桌子?` t_coslers`?(
` id `?int(11)?不是嗎?NULL?自動遞增,
` f_PY `?char(1)?性格?設置?utf8?違約?空,
` cBegin`?smallint(5)?未簽名?不是嗎?空,
` cEnd `?smallint(5)?未簽名?不是嗎?空,
初級?鑰匙?(` id `)
)?ENGINE=InnoDB?AUTO_INCREMENT=24?違約?CHARSET = Latin 1;
- ?-
- ?記錄?的?t_coslers
- ?-
插入?變成?` t_coslers`?價值觀?('1',?壹個‘,?'45217',?'45252');
插入?變成?` t_coslers`?價值觀?('2',?b‘,?'45253',?'45760');
插入?變成?` t_coslers`?價值觀?('3',?c‘,?'45761',?'46317');
插入?變成?` t_coslers`?價值觀?('4',?d‘,?'46318',?'46825');
插入?變成?` t_coslers`?價值觀?('5',?e‘,?'46826',?'47009');
插入?變成?` t_coslers`?價值觀?('6',?f‘,?'47010',?'47296');
插入?變成?` t_coslers`?價值觀?('7',?g‘,?'47297',?'47613');
插入?變成?` t_coslers`?價值觀?('8',?h‘,?'47614',?'48118');
插入?變成?` t_coslers`?價值觀?('9',?j‘,?'48119',?'49061');
插入?變成?` t_coslers`?價值觀?('10',?k‘,?'49062',?'49323');
插入?變成?` t_coslers`?價值觀?('11',?l‘,?'49324',?'49895');
插入?變成?` t_coslers`?價值觀?('12',?m‘,?'49896',?'50370');
插入?變成?` t_coslers`?價值觀?('13',?n‘,?'50371',?'50613');
插入?變成?` t_coslers`?價值觀?('14',?奧,?'50614',?'50621');
插入?變成?` t_coslers`?價值觀?('15',?p‘,?'50622',?'50905');
插入?變成?` t_coslers`?價值觀?('16',?q‘,?'50906',?'51386');
插入?變成?` t_coslers`?價值觀?('17',?r‘,?'51387',?'51445');
插入?變成?` t_coslers`?價值觀?('18',?s‘,?'51446',?'52217');
插入?變成?` t_coslers`?價值觀?('19',?t‘,?'52218',?'52697');
插入?變成?` t_coslers`?價值觀?('20',?w‘,?'52698',?'52979');
插入?變成?` t_coslers`?價值觀?('21',?x‘,?'52980',?'53640');
插入?變成?` t_coslers`?價值觀?('22',?y‘,?'53689',?'54480');
插入?變成?` t_coslers`?價值觀?('23',?z‘,?'54481',?'55289');借助中間表查詢漢字首字母的示例SQL如下所示(utf8字符集):
選擇?t1.id,?t1.name,t2.f_PY
從哪裏?t_user?t1,?t_coslers?t2
where conv(HEX(LEFT(CONVERT(t 1 . name?使用?gbk?),?1)),?16,?10)?介於?t2.cBegin?然後呢。t2.cEnd
訂單?被誰?轉換(t1.name?使用?gbk)?ASC需要註意的壹點是,上述排序和分類方法對多音字的支持不是很好,需要高精度的學生謹慎使用。