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

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

猜你喜欢

转载自blog.csdn.net/ieeso/article/details/82660152