最近要实现根据传入的拼音首字母查询数据库里的中文字段,并且正常来讲都需要支持用户输入多个拼音首字母,例如想要查询"我的",那么用户就可以输入"wd",然后包含"我的"的数据库记录就都被模糊查询出来了。
话不多说,先贴代码再解释原理:
上图中函数的作用就是根据传入的中文字符串来获取对应的拼音首字母,例如传入"我的",那么函数将会给你返回"WD",我相信说到这儿很多同学就已经恍然大悟了,也就是说你把你要查询的字段用这个函数包起来当做查询条件,条件的值就是用户传过来的拼音首字母,好,我知道我这么说你们可能迷糊了,我们来写一条sql
select * from user where F_GETPY(user_name) like '%WD%'
完事了 就是这么简单
原理就是利用了gbk编码对中文的排序支持根据拼音首字母排序,函数中临时表就是记录了每个拼音首字母对应的中文汉字编码最小的汉字
计算机是0和1的世界,gbk编码的每一个汉字存入计算机中其实都是二进制数,然后根据gbk编码规则将这些二进制数转换成我们看到的中文汉字的,所以其实图中"chr<=tmp_str"比较的是gbk的数字编码,然后降序排序取最近的一个拼音首字母
不知道我讲的是否明白,但我已经尽力了