文档章节

mysql实现用拼音搜索中文的数据库实现

IT_小翼
 IT_小翼
发布于 2015/05/06 14:27
字数 1029
阅读 1896
收藏 14

1、创建表:

CREATE TABLE
IF NOT EXISTS `t_base_pinyin` (
	`pin_yin_` VARCHAR (255) CHARACTER
	SET gbk NOT NULL,
	`code_` INT (11) NOT NULL,
	PRIMARY KEY (`code_`)
) ENGINE = INNODB DEFAULT CHARSET = latin1;

2、插入数据:

INSERT INTO t_base_pinyin (pin_yin_, code_)
VALUES
	("a", 20319),
	("ai", 20317),
	("an", 20304),
	("ang", 20295),
	("ao", 20292),
	("ba", 20283),
	("bai", 20265),
	("ban", 20257),
	("bang", 20242),
	("bao", 20230),
	("bei", 20051),
	("ben", 20036),
	("beng", 20032),
	("bi", 20026),
	("bian", 20002),
	("biao", 19990),
	("bie", 19986),
	("bin", 19982),
	("bing", 19976),
	("bo", 19805),
	("bu", 19784),
	("ca", 19775),
	("cai", 19774),
	("can", 19763),
	("cang", 19756),
	("cao", 19751),
	("ce", 19746),
	("ceng", 19741),
	("cha", 19739),
	("chai", 19728),
	("chan", 19725),
	("chang", 19715),
	("chao", 19540),
	("che", 19531),
	("chen", 19525),
	("cheng", 19515),
	("chi", 19500),
	("chong", 19484),
	("chou", 19479),
	("chu", 19467),
	("chuai", 19289),
	("chuan", 19288),
	("chuang", 19281),
	("chui", 19275),
	("chun", 19270),
	("chuo", 19263),
	("ci", 19261),
	("cong", 19249),
	("cou", 19243),
	("cu", 19242),
	("cuan", 19238),
	("cui", 19235),
	("cun", 19227),
	("cuo", 19224),
	("da", 19218),
	("dai", 19212),
	("dan", 19038),
	("dang", 19023),
	("dao", 19018),
	("de", 19006),
	("deng", 19003),
	("di", 18996),
	("dian", 18977),
	("diao", 18961),
	("die", 18952),
	("ding", 18783),
	("diu", 18774),
	("dong", 18773),
	("dou", 18763),
	("du", 18756),
	("duan", 18741),
	("dui", 18735),
	("dun", 18731),
	("duo", 18722),
	("e", 18710),
	("en", 18697),
	("er", 18696),
	("fa", 18526),
	("fan", 18518),
	("fang", 18501),
	("fei", 18490),
	("fen", 18478),
	("feng", 18463),
	("fo", 18448),
	("fou", 18447),
	("fu", 18446),
	("ga", 18239),
	("gai", 18237),
	("gan", 18231),
	("gang", 18220),
	("gao", 18211),
	("ge", 18201),
	("gei", 18184),
	("gen", 18183),
	("geng", 18181),
	("gong", 18012),
	("gou", 17997),
	("gu", 17988),
	("gua", 17970),
	("guai", 17964),
	("guan", 17961),
	("guang", 17950),
	("gui", 17947),
	("gun", 17931),
	("guo", 17928),
	("ha", 17922),
	("hai", 17759),
	("han", 17752),
	("hang", 17733),
	("hao", 17730),
	("he", 17721),
	("hei", 17703),
	("hen", 17701),
	("heng", 17697),
	("hong", 17692),
	("hou", 17683),
	("hu", 17676),
	("hua", 17496),
	("huai", 17487),
	("huan", 17482),
	("huang", 17468),
	("hui", 17454),
	("hun", 17433),
	("huo", 17427),
	("ji", 17417),
	("jia", 17202),
	("jian", 17185),
	("jiang", 16983),
	("jiao", 16970),
	("jie", 16942),
	("jin", 16915),
	("jing", 16733),
	("jiong", 16708),
	("jiu", 16706),
	("ju", 16689),
	("juan", 16664),
	("jue", 16657),
	("jun", 16647),
	("ka", 16474),
	("kai", 16470),
	("kan", 16465),
	("kang", 16459),
	("kao", 16452),
	("ke", 16448),
	("ken", 16433),
	("keng", 16429),
	("kong", 16427),
	("kou", 16423),
	("ku", 16419),
	("kua", 16412),
	("kuai", 16407),
	("kuan", 16403),
	("kuang", 16401),
	("kui", 16393),
	("kun", 16220),
	("kuo", 16216),
	("la", 16212),
	("lai", 16205),
	("lan", 16202),
	("lang", 16187),
	("lao", 16180),
	("le", 16171),
	("lei", 16169),
	("leng", 16158),
	("li", 16155),
	("lia", 15959),
	("lian", 15958),
	("liang", 15944),
	("liao", 15933),
	("lie", 15920),
	("lin", 15915),
	("ling", 15903),
	("liu", 15889),
	("long", 15878),
	("lou", 15707),
	("lu", 15701),
	("lv", 15681),
	("luan", 15667),
	("lue", 15661),
	("lun", 15659),
	("luo", 15652),
	("ma", 15640),
	("mai", 15631),
	("man", 15625),
	("mang", 15454),
	("mao", 15448),
	("me", 15436),
	("mei", 15435),
	("men", 15419),
	("meng", 15416),
	("mi", 15408),
	("mian", 15394),
	("miao", 15385),
	("mie", 15377),
	("min", 15375),
	("ming", 15369),
	("miu", 15363),
	("mo", 15362),
	("mou", 15183),
	("mu", 15180),
	("na", 15165),
	("nai", 15158),
	("nan", 15153),
	("nang", 15150),
	("nao", 15149),
	("ne", 15144),
	("nei", 15143),
	("nen", 15141),
	("neng", 15140),
	("ni", 15139),
	("nian", 15128),
	("niang", 15121),
	("niao", 15119),
	("nie", 15117),
	("nin", 15110),
	("ning", 15109),
	("niu", 14941),
	("nong", 14937),
	("nu", 14933),
	("nv", 14930),
	("nuan", 14929),
	("nue", 14928),
	("nuo", 14926),
	("o", 14922),
	("ou", 14921),
	("pa", 14914),
	("pai", 14908),
	("pan", 14902),
	("pang", 14894),
	("pao", 14889),
	("pei", 14882),
	("pen", 14873),
	("peng", 14871),
	("pi", 14857),
	("pian", 14678),
	("piao", 14674),
	("pie", 14670),
	("pin", 14668),
	("ping", 14663),
	("po", 14654),
	("pu", 14645),
	("qi", 14630),
	("qia", 14594),
	("qian", 14429),
	("qiang", 14407),
	("qiao", 14399),
	("qie", 14384),
	("qin", 14379),
	("qing", 14368),
	("qiong", 14355),
	("qiu", 14353),
	("qu", 14345),
	("quan", 14170),
	("que", 14159),
	("qun", 14151),
	("ran", 14149),
	("rang", 14145),
	("rao", 14140),
	("re", 14137),
	("ren", 14135),
	("reng", 14125),
	("ri", 14123),
	("rong", 14122),
	("rou", 14112),
	("ru", 14109),
	("ruan", 14099),
	("rui", 14097),
	("run", 14094),
	("ruo", 14092),
	("sa", 14090),
	("sai", 14087),
	("san", 14083),
	("sang", 13917),
	("sao", 13914),
	("se", 13910),
	("sen", 13907),
	("seng", 13906),
	("sha", 13905),
	("shai", 13896),
	("shan", 13894),
	("shang", 13878),
	("shao", 13870),
	("she", 13859),
	("shen", 13847),
	("sheng", 13831),
	("shi", 13658),
	("shou", 13611),
	("shu", 13601),
	("shua", 13406),
	("shuai", 13404),
	("shuan", 13400),
	("shuang", 13398),
	("shui", 13395),
	("shun", 13391),
	("shuo", 13387),
	("si", 13383),
	("song", 13367),
	("sou", 13359),
	("su", 13356),
	("suan", 13343),
	("sui", 13340),
	("sun", 13329),
	("suo", 13326),
	("ta", 13318),
	("tai", 13147),
	("tan", 13138),
	("tang", 13120),
	("tao", 13107),
	("te", 13096),
	("teng", 13095),
	("ti", 13091),
	("tian", 13076),
	("tiao", 13068),
	("tie", 13063),
	("ting", 13060),
	("tong", 12888),
	("tou", 12875),
	("tu", 12871),
	("tuan", 12860),
	("tui", 12858),
	("tun", 12852),
	("tuo", 12849),
	("wa", 12838),
	("wai", 12831),
	("wan", 12829),
	("wang", 12812),
	("wei", 12802),
	("wen", 12607),
	("weng", 12597),
	("wo", 12594),
	("wu", 12585),
	("xi", 12556),
	("xia", 12359),
	("xian", 12346),
	("xiang", 12320),
	("xiao", 12300),
	("xie", 12120),
	("xin", 12099),
	("xing", 12089),
	("xiong", 12074),
	("xiu", 12067),
	("xu", 12058),
	("xuan", 12039),
	("xue", 11867),
	("xun", 11861),
	("ya", 11847),
	("yan", 11831),
	("yang", 11798),
	("yao", 11781),
	("ye", 11604),
	("yi", 11589),
	("yin", 11536),
	("ying", 11358),
	("yo", 11340),
	("yong", 11339),
	("you", 11324),
	("yu", 11303),
	("yuan", 11097),
	("yue", 11077),
	("yun", 11067),
	("za", 11055),
	("zai", 11052),
	("zan", 11045),
	("zang", 11041),
	("zao", 11038),
	("ze", 11024),
	("zei", 11020),
	("zen", 11019),
	("zeng", 11018),
	("zha", 11014),
	("zhai", 10838),
	("zhan", 10832),
	("zhang", 10815),
	("zhao", 10800),
	("zhe", 10790),
	("zhen", 10780),
	("zheng", 10764),
	("zhi", 10587),
	("zhong", 10544),
	("zhou", 10533),
	("zhu", 10519),
	("zhua", 10331),
	("zhuai", 10329),
	("zhuan", 10328),
	("zhuang", 10322),
	("zhui", 10315),
	("zhun", 10309),
	("zhuo", 10307),
	("zi", 10296),
	("zong", 10281),
	("zou", 10274),
	("zu", 10270),
	("zuan", 10262),
	("zui", 10260),
	("zun", 10256),
	("zuo", 10254);

3、创建函数:

DROP FUNCTION IF EXISTS to_pinyin;
DELIMITER $
CREATE FUNCTION to_pinyin(NAME VARCHAR(255) CHARSET gbk)
RETURNS VARCHAR(255) CHARSET gbk
BEGIN
    DECLARE mycode INT;
    DECLARE tmp_lcode VARCHAR(2) CHARSET gbk;
    DECLARE lcode INT;
    DECLARE tmp_rcode VARCHAR(2) CHARSET gbk;
    DECLARE rcode INT;
    DECLARE mypy VARCHAR(255) CHARSET gbk DEFAULT '';
    DECLARE lp INT;
    SET mycode = 0;
    SET lp = 1;
    SET NAME = HEX(NAME);
    WHILE lp < LENGTH(NAME) DO
        SET tmp_lcode = SUBSTRING(NAME, lp, 2);
        SET lcode = CAST(ASCII(UNHEX(tmp_lcode)) AS UNSIGNED); 
        SET tmp_rcode = SUBSTRING(NAME, lp + 2, 2);
        SET rcode = CAST(ASCII(UNHEX(tmp_rcode)) AS UNSIGNED); 
        IF lcode > 128 THEN
            SET mycode =65536 - lcode * 256 - rcode ;
            SELECT CONCAT(mypy,pin_yin_) INTO mypy FROM t_base_pinyin WHERE CODE_ >= ABS(mycode) ORDER BY CODE_ ASC LIMIT 1;
            SET lp = lp + 4;
        ELSE
            SET mypy = CONCAT(mypy,CHAR(CAST(ASCII(UNHEX(SUBSTRING(NAME, lp, 2))) AS UNSIGNED)));
            SET lp = lp + 2;
        END IF;
    END WHILE;
    RETURN LOWER(mypy);
END;
$
DELIMITER ;


4、创建视图:

CREATE VIEW v_pinyin AS SELECT
	u.id,
	to_pinyin (u.displayname) AS pinyin,
	u.displayName
FROM
	wsm_userinfo u



© 著作权归作者所有

共有 人打赏支持
IT_小翼

IT_小翼

粉丝 42
博文 153
码字总数 36364
作品 0
西安
程序员
私信 提问
【我的Android进阶之旅】Android实现中文汉字笔划(笔画)排序、中文拼音排序、英文排序的国家地区选择界面

版权声明:本文为【欧阳鹏】原创文章,欢迎转载,转载请注明出处! 【http://blog.csdn.net/ouyang_peng】 https://blog.csdn.net/qq446282412/article/details/84109727 一、需求描述 最近要...

欧阳鹏
11/15
0
0
MySQL基础、管理、高级、用法、架构、优化好文章收集

基础 管理 高级 1、mysql分区技术 http://my.oschina.net/liting/blog/465149 2、mysql 外键(foreign key)的详解和实例 用法 1、mysql实现用拼音搜索中文的数据库实现 http://my.oschina....

tomener
2016/04/25
149
0
Android中文联系人排序及检索补丁的原理

Android中文联系人排序及检索补丁的原理(090819更新) 2009年4月26日,更新了源码和相关文件 很久以前做了这个补丁,有幸的是朋友们都还算喜爱它,没白费功夫。不少朋友来信问它的原理,现在...

LiSteven
2012/12/26
0
0
Qt5软键盘实现中文拼音输入法

Qt5软键盘实现中文拼音输入法 一、序 基于Qt实现的虚拟键盘实现输入法在网上所有资料看来,几乎都是基于生成的中文汉字数据库实现的方法,不够灵活,不够智能。 二、实现 1、拼音输入法的库 ...

容我三思兮
2017/10/31
0
0
MySQL中如何实现中文按拼音或者按笔画排序

MySQL中如何实现中文按拼音或者按笔画排序 中文是UTF8

半醉人间
2014/02/28
617
1

没有更多内容

加载失败,请刷新页面

加载更多

云环境所面临的安全威胁

导读 为了云计算的健康发展和等级保护工作在新形势下顺利推进,就不能忽视对云计算面临的各类安全威胁的研究和分析,并制定和建立相应的等级保护政策、技术体系,应对即将到来的云浪潮。 为了...

问题终结者
40分钟前
1
0
大牛五分钟教你如何创建并运行java线程

Java线程类也是一个object类,它的实例都继承自java.lang.Thread或其子类。 可以用如下方式用java中创建一个线程: 执行该线程可以调用该线程的start()方法: 在上面的例子中,我们并没有为线程...

java知识分子
41分钟前
1
0
监控某进程工作状态的脚本

很多时候,我们需要监控某个脚本是否正在执行,如果不在执行,则需将它重启。 思路: 监测脚本或进程的执行状态,可以通过ps -ef,再加上grep命令进行定位。 如果该进程在执行,则上述命令会...

vinci321
42分钟前
1
0
彻底弃用PHP转入Kotlin阵营

痛定思痛,决定彻底弃用PHP,转入Kotlin,采用Ktor方案。Kotlin从去年年底到现在,我都一直保持关注,这一年下来,从1.0升级到1.3,增加了很多特性和支持。其实,只要是JetBrains扶持着的,想...

曾建凯
46分钟前
1
0
php动态扩展模块安装

11月21日任务 11.32 php扩展模块装安装 1.PHP扩展模块安装 示例一:编译安装一个扩展模块 /usr/local/php/bin/php -m //查看模块 下面安装一个redis的模块 cd /usr/local/src/ 进入该目录下 ...

hhpuppy
51分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部