mysql实现用拼音搜索中文的数据库实现
mysql实现用拼音搜索中文的数据库实现
IT_小翼 发表于3年前
mysql实现用拼音搜索中文的数据库实现
  • 发表于 3年前
  • 阅读 1460
  • 收藏 14
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

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_小翼
粉丝 41
博文 150
码字总数 36364
×
IT_小翼
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: