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

时间:2025-02-15 08:31:29

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 

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

,

to_pinyin () AS pinyin,

FROM

wsm_userinfo u