
MySQL按照汉字的拼⾳排序、按照⾸字母分类
项⽬中有时候需要按照汉字的拼⾳排序,⽐如联系⼈列表、矿物分类等,有的还需要按拼⾳字母从A到Z分类显⽰。
如果存储汉字的字段编码使⽤的是GBK字符集,因为GBK内码编码时本⾝就采⽤了拼⾳排序的⽅法(常⽤⼀级汉字3755个采⽤拼⾳排
序,⼆级汉字就不是了,但考虑到⼈名等都是常⽤汉字,因此只是针对⼀级汉字能正确排序也够⽤了),直接在查询语句后⾯添加ORDER
BYnameASC,查询结果将按照姓⽒的升序排序;如果存储姓名的字段采⽤的是utf8字符集,需要在排序的时候对字段进⾏转码,对应的代
码是ORDERBYconvert(nameusinggbk)ASC,同样,查询的结果也是按照姓⽒的升序排序。
按拼⾳⾸字母分类显⽰的时候,需要借助⼀个中间表,存储的是字母对应的汉字的编码范围,这样的话,每次取出汉字然后跟中间表⽐
对就可以了,中间表创建和插⼊数据的SQL如下:
/*
NavicatMySQLDataTransfer
TargetServerType:MYSQL
TargetServerVersion:50617
FileEncoding:65001
Date:2015-07-0211:12:15
*/
SETFOREIGN_KEY_CHECKS=0;
------------------------------
--Tablestructurefort_coslers
------------------------------
DROPTABLEIFEXISTS`t_coslers`;
CREATETABLE`t_coslers`(
`id`int(11)NOTNULLAUTO_INCREMENT,
`f_PY`char(1)CHARACTERSETutf8DEFAULTNULL,
`cBegin`smallint(5)unsignedNOTNULL,
`cEnd`smallint(5)unsignedNOTNULL,
PRIMARYKEY(`id`)
)ENGINE=InnoDBAUTO_INCREMENT=24DEFAULTCHARSET=latin1;
------------------------------
--Recordsoft_coslers
------------------------------
INSERTINTO`t_coslers`VALUES('1','A','45217','45252');
INSERTINTO`t_coslers`VALUES('2','B','45253','45760');
INSERTINTO`t_coslers`VALUES('3','C','45761','46317');
INSERTINTO`t_coslers`VALUES('4','D','46318','46825');
INSERTINTO`t_coslers`VALUES('5','E','46826','47009');
INSERTINTO`t_coslers`VALUES('6','F','47010','47296');
INSERTINTO`t_coslers`VALUES('7','G','47297','47613');
INSERTINTO`t_coslers`VALUES('8','H','47614','48118');
INSERTINTO`t_coslers`VALUES('9','J','48119','49061');
INSERTINTO`t_coslers`VALUES('10','K','49062','49323');
INSERTINTO`t_coslers`VALUES('11','L','49324','49895');
INSERTINTO`t_coslers`VALUES('12','M','49896','50370');
INSERTINTO`t_coslers`VALUES('13','N','50371','50613');
INSERTINTO`t_coslers`VALUES('14','O','50614','50621');
INSERTINTO`t_coslers`VALUES('15','P','50622','50905');
INSERTINTO`t_coslers`VALUES('16','Q','50906','51386');
INSERTINTO`t_coslers`VALUES('17','R','51387','51445');
INSERTINTO`t_coslers`VALUES('18','S','51446','52217');
INSERTINTO`t_coslers`VALUES('19','T','52218','52697');
INSERTINTO`t_coslers`VALUES('20','W','52698','52979');
INSERTINTO`t_coslers`VALUES('21','X','52980','53640');
INSERTINTO`t_coslers`VALUES('22','Y','53689','54480');
INSERTINTO`t_coslers`VALUES('23','Z','54481','55289');
借助中间表查询汉字⾸字母的⽰例SQL如下(utf8字符集):
,,t2.f_PY
FROMt_urt1,t_coslerst2
WHERECONV(HEX(LEFT(CONVERT(INGgbk),1)),16,10)
ORDERBYconvert(inggbk)ASC
需要注意的⼀点是,上述的排序、分类⽅法对多⾳字的⽀持并不是很好,要求⾼精度的同学慎⽤。
本文发布于:2023-03-12 10:13:19,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/zhishi/a/1678587199138536.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:按拼音排序.doc
本文 PDF 下载地址:按拼音排序.pdf
| 留言与评论(共有 0 条评论) |