DBeaver社区版不支持中国手机号规则生成,仅提供国际假号模板;企业版可通过正则1[3-9]\d{9}或Groovy脚本实现合规生成;社区版用户需用MySQL存储过程+号段表硬编码补位。

直接说结论:DBeaver 社区版不支持手机号规则生成,必须用企业版的 Mock Data Generator,且需手动配置正则或自定义脚本;社区版只能靠 SQL 存储过程或外部脚本补位。
为什么社区版无法生成合规手机号
DBeaver 社区版的「生成模拟数据」功能(右键表 → Generate mock data)只提供基础类型模板:如 phone 生成器,但它的输出是固定格式的假号(如 +1-555-0123-4567),不匹配中国 11 位手机号结构,也不遵循真实号段规则(如 138、159、177 等前三位)。它没有号段白名单、长度控制、运营商归属等字段级约束能力。
- 你看到的
phone模板本质是国际通用占位符,不是中国手机号生成器 - 社区版不开放模板编辑入口,无法替换为自定义逻辑
- 即使勾选
Auto assign generators,它也不会识别CHAR(11)或VARCHAR(11)字段并自动匹配号段规则
企业版中怎么配手机号生成规则
企业版的 Mock Data Generator 支持正则表达式和 Groovy 脚本,这才是生成真实感手机号的关键路径。核心操作在字段模板配置页:
- 选中手机号字段(如
mobile),点击「编辑生成器」→ 选择Regular expression - 填入中国手机号正则:
1[3-9]\d{9}(覆盖当前主流号段,不含虚拟运营商 170/171 等需单独扩展) - 若需更精准(如限定某运营商),可改用多前缀枚举:
1(3[0-9]|5[0-9]|7[0-9]|8[0-9]|9[0-9])\d{8} - 注意:正则仅控制格式,不保证号段有效性;如需严格按工信部号段字典展开,得换用
Groovy script模板,读取外部 JSON 号段列表后随机 pick 前缀再补足后 8 位
没企业版?用 MySQL 存储过程硬刚
如果你只有社区版 + MySQL,最稳的替代方案是写存储过程,在数据库端生成带号段逻辑的手机号。这不是“调个插件”,而是写一段可复用的 SQL 逻辑:
- 先建一张
phone_prefix表,存合法前缀(如138,159,186),字段为prefix CHAR(3) - 在目标表插入时,用
CONCAT+RAND()+FLOOR()拼接:CONCAT((SELECT prefix FROM phone_prefix ORDER BY RAND() LIMIT 1), LPAD(FLOOR(RAND()*100000000), 8, '0')) - 避免重复:加
UNIQUE约束 + 插入时用INSERT IGNORE或ON DUPLICATE KEY UPDATE - 性能提示:一次生成 5 万条时,分批提交(
BATCH SIZE = 1000),否则事务日志暴涨
真正容易被忽略的是号段时效性——去年还有效的 174 卫星号段,今年可能已停发;而 192、198 等新号段又未被多数模板收录。规则不在工具里,而在你维护的那张前缀表中。


















