MYSQL生成中文名字

前段时间需要数据库自动生成人名的需求,上网找了下

使用方法:调用 create_name 函数即可。

注:
姓现在只有单姓的,复姓直接往数据库中加,如果字段太短修改字段长度;
名部分是从所有汉字中随机取的,所以可能导致生成的名字有点搞笑 :-)




参考:http://www.cnblogs.com/chinaprg/archive/2006/10/08/523335.html

下面SQL脚本
/*

    author:dany
    email: dany.zj.cn@gmail.com
    blog:http://blog.youkuaiyun.com/dany_zj/

*/





#
# Structure 
for the `xb100` table : 
#

DROP TABLE IF EXISTS `xb100`;

CREATE TABLE `xb100` (
  `name` 
char(2NOT NULL,
  `q` 
tinyint(1NOT NULL DEFAULT '5',
  
PRIMARY KEY (`name`)
) ENGINE
=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED;

#
# Data 
for the `xb100` table  (LIMIT 0,500)
#

INSERT INTO `xb100` (`name`, `q`) VALUES 
  (
'',1),
  (
'',1),
  (
'',1),
  (
'',3),
  (
'',5),
  (
'',3),
  (
'',5),
  (
'',1),
  (
'',1),
  (
'',2),
  (
'',2),
  (
'',9),
  (
'',1),
  (
'',9),
  (
'',2),
  (
'',3),
  (
'',9),
  (
'',9),
  (
'',3),
  (
'',9),
  (
'',8),
  (
'',3),
  (
'',5),
  (
'',4),
  (
'',3),
  (
'',1),
  (
'',2),
  (
'',9),
  (
'',4),
  (
'',3),
  (
'',4),
  (
'',7),
  (
'',4),
  (
'',9),
  (
'',7),
  (
'',5),
  (
'',6),
  (
'',9),
  (
'',9),
  (
'',3),
  (
'',6),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',4),
  (
'',5),
  (
'',8),
  (
'',9),
  (
'',6),
  (
'',4),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',3),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',6),
  (
'',9),
  (
'',6),
  (
'',4),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',7),
  (
'',3),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',5),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',3),
  (
'',9),
  (
'',4),
  (
'',9),
  (
'',9),
  (
'',7),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',2),
  (
'',9),
  (
'',9),
  (
'',4),
  (
'',9),
  (
'',6),
  (
'',9),
  (
'',9),
  (
'',6),
  (
'',9),
  (
'',7),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',8),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',5),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',7),
  (
'',8),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',4),
  (
'',3),
  (
'',5),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',7),
  (
'',9),
  (
'',9),
  (
'',3),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',6),
  (
'',2),
  (
'',7),
  (
'',9),
  (
'',9),
  (
'',6),
  (
'',5),
  (
'',6),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',8),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',5),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',5),
  (
'',9),
  (
'',9),
  (
'',4),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',6),
  (
'',7),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',4),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',7),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'羿',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',8),
  (
'',9),
  (
'',5),
  (
'',9),
  (
'',8),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'宿',9),
  (
'',7),
  (
'怀',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',6),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'寿',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',5),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',6),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'广',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',4),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9),
  (
'',9);

COMMIT;

#
# Definition 
for the `get_hanzi_code` function : 
#

DROP FUNCTION IF EXISTS `get_hanzi_code`;

CREATE DEFINER = 'root'@'localhost' FUNCTION `get_hanzi_code`()
    
RETURNS char(1) CHARSET gb2312
    
NOT DETERMINISTIC
    NO SQL
    SQL SECURITY DEFINER
    COMMENT 
''
BEGIN

DECLARE v_c1 INT;
DECLARE v_c2 INT;
DECLARE v_c3 INT;
DECLARE v_c4 INT;

SET v_c1 = 11+FLOOR(RAND()*3);
IF v_c1=13 THEN
   
SET v_c2 = FLOOR(RAND()*7);
ELSE
   
SET v_c2 = FLOOR(RAND()*16);
END IF;

SET v_c3 = FLOOR(10+RAND()*5);

SET v_c4 = FLOOR(RAND()*15)+1;

RETURN CHAR(((v_c1<<12)+(v_c2<<8)+(v_c3<<4)+(v_c4)) using gb2312);

END;

#
# Definition 
for the `create_name` function : 
#

DROP FUNCTION IF EXISTS `create_name`;

CREATE DEFINER = 'root'@'localhost' FUNCTION `create_name`()
    
RETURNS varchar(4) CHARSET utf8
    
NOT DETERMINISTIC
    
CONTAINS SQL
    SQL SECURITY DEFINER
    COMMENT 
''
BEGIN

DECLARE v_result CHAR(4);
DECLARE v_q INT;
DECLARE v_x CHAR(2);

set v_q = RAND()*10+1;

SELECT name INTO v_x
FROM xb100
WHERE q<=v_q
ORDER BY RAND()
limit 
1;

SET v_result = CONCAT(TRIM(v_x),get_hanzi_code(),get_hanzi_code());
   IF
RAND()<0.7 THEN
         
SET v_result = CONCAT(result ,get_hanzi_code());
   END IF;

RETURN v_result;
-- 
END;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值