MySQL数据库生成汉语拼音

Colin 1年前 ⋅ 243 阅读

前两天导入一批商品数据,由于不是走业务系统入库的,所以拼音数据缺失,检索商品时不能按照拼音检索造成使用不便,今天补上所有商品名称的拼音:

第一步:创建一个py库

CREATE DATABASE `py`;

第二步:创建一张表

CREATE TABLE `t_base_pinyin` (
`pin_yin_` VARCHAR(255) NOT NULL COLLATE 'gbk_chinese_ci',
`code_` INT(11) NOT NULL,
PRIMARY KEY (`code_`)
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
;

第三步:往刚创建的表里插入拼音的字典数据

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),('Luan', 15667),('Lue', 15661),('Lun', 15659),('Luo', 15652),('Lv', 15681),('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),('Nuan', 14929),('Nue', 14928),('Nuo', 14926),('Nv', 14930),('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);

第四步:创建一个带参数的函数(DEFINER和函数名啥的都可以改成你自己的)

CREATE DEFINER=`workf`@`127.0.0.1` FUNCTION `to_pinyin`(
`NAME` VARCHAR(255) CHARSET gbk
)
RETURNS varchar(255) CHARSET gbk
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
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 (mypy);
END

第五步:调用一下试试

查询:select to_pinyin('代码简洁') as py ;
结果:DaiMaJianJie

可以很顺利的根据汉字查出了拼音。个别多音字请查询出来自行处理一下。

全部评论: 0

    我有话说: