MySQL中实现中文转拼音

前言:

今天有个业务需求,需要将用户的密码统一进行设置,现在只有用户的昵称(nickname),

用户的username跟password字段为空。遂就用到了中文转拼音~

1、先将nickname转拼音并赋值给username字段

2、使用username字段配合加密函数,对该用户的密码进行赋值

-- 加密-按照用户名进行加密
select  HEX(AES_ENCRYPT('123456','admin'))
-- 解密-按照用户名进行解密
SELECT AES_DECRYPT(UNHEX("F8833383029D93ACBD66F6C8D81602DD"),'admin')

一、创建拼音对照表

-- 创建汉字拼音对照临时表
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;

二、插入对照数据

-- 插入数据
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 
    );
View Code 

三、创建汉字转换拼音函数

-- 建立汉字转换拼音函数
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 ;

如果出现错误:This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its de

 

执行下面SQL,然后重新执行函数即可:

set global log_bin_trust_function_creators=TRUE;

四、使用方法

select to_pinyin('测试')

posted @ 2022-08-09 18:25  Java小白的搬砖路  阅读(1285)  评论(0编辑  收藏  举报