对不起LZ了,这个答案正像Sunyanzi指出的,MySQL不是把高位字节吃掉而是转成了Int的最大值。

考虑到原先提交的答案还是花了点心思写的,就还留在这里了,也许对其他高位字节溢出的问题有所帮助。

这个有点意思,问题出在int只有4个字节,而手机号码是11位的十进制值由5个字节组成,所以转成int后最高位的第5个字节被“吃掉了”,然后就杯具了。

解决思路:

把丢失的那个字节找回来。

按照当前手机号码范围130 0000 0000到189 9999 9999经分析,丢失的高位字节可能是0x03或者0x04。

因此加上0x03或者0x04恢复后的值(Long长整型)符合手机号码范围/格式,就可以得到原始值了。

遗留问题: 有可能出现加0x03和0x04都符合手机号码范围/格式的情况,取加0x04的结果(没法子的事情)

好了,上代码(Java)代码:

/**

* 按照当前手机号码范围130 0000 0000到189 9999 9999经分析,丢失的高位字节可能是0x03或者0x04。

* 因此加上0x03或者0x04恢复后的值(Long长整型)符合手机号码范围/格式,就可以得到原始值了。

* 有可能出现加0x03和0x04都符合手机号码范围/格式的情况,取加0x04的结果(没法子的事情)

*

* @param original 溢出前的原始11位手机号码

* @return 转int之后,再重新恢复得到的11位手机号码

*/

public static long recover(long original) {

Pattern p = Pattern.compile("1[3,4,5,8]\\d{9}");

// 更精确的手机号段,但可能不是最新的,这里先不使用。参考: http://wenku.baidu.com/view/9d088df30242a8956bece435.html

// Pattern.compile("(133|153|180|181|189|134|135|136|137|138|139|150|151|152|157|158|159|182|183|187|188|130|131|132|155|156|185|186|145|147)\\d{8}");

int errorInt = (int) original;

System.out.println("溢出前的long值:" + original);

System.out.println("溢出后的int值:" + errorInt);

System.out.println("溢出前的16进制值:" + Long.toHexString(original));

String hexA = "000000000000" + Long.toHexString(errorInt);

hexA = hexA.substring(hexA.length() - 8);

System.out.println("溢出后的16进制值(左补0):" + Long.toHexString(errorInt));

String hex1 = "4" + hexA;

System.out.println("补全后的16进制值1:" + hex1);

BigInteger bi1 = new BigInteger(hex1, 16);

long rt1 = bi1.longValue();

System.out.println("补全后的Long值:" + rt1);

String hex2 = "3" + hexA;

System.out.println("补全后的16进制值2:" + hex2);

BigInteger bi2 = new BigInteger(hex2, 16);

long rt2 = bi2.longValue();

System.out.println("补全后的Long值2:" + rt2);

final boolean m1 = p.matcher(String.valueOf(rt1)).matches();

final boolean m2 = p.matcher(String.valueOf(rt2)).matches();

long rt = 0;

if (m1 && m2) {

// 加3加4都符合手机号码格式

System.err.println("加3加4都符合手机号码格式的溢出后int值:" + errorInt + ". 2个可能的恢复值为: " + rt1 + ", " + rt2);

//有可能出现加0x03和0x04都符合手机号码范围/格式的情况,取加0x04的结果(没法子的事情)

rt = rt1;

} else {

if (m1) {

rt = rt1;

}

if (m2) {

rt = rt2;

}

}

System.out.println("恢复后的符合手机号码格式的值:" + rt + "\n\n");

return rt;

}

mysql手机号11_我用不小心用 mysql 的int(11) 存了 手机号,数据都有问题,有办法恢复么?...相关推荐

  1. mysql int 11手机号_【mysql】我用不小心用 mysql 的int(11) 存了 手机号,数据都有问题,有办法恢复么?...

    我用不小心用 mysql 的int(11) 存了用户的手机号,结果里面存的数据都是 10 位的,而且也不是单纯的被截断了一位, 比如手机号 18345231102 会被转成 4294967295 有办 ...

  2. 浅谈Redis与MySQL的耦合性以及利用管道完成MySQL到Redis的高效迁移

    ㈠ Redis 与 MySQL 的耦合性 在业务架构早期.我们便该"吃着碗里的看着锅里的".切莫让MySQL 有梦.而Redis 无心 毕竟.有些关系型的结构不适合放到Redis跑 ...

  3. MySQL外键关联(一对多)MySQL连接查询

    MySQL外键关联(一对多) 外键说明 什么是外键? 1)表A中有字段(如身份证号)做了主键,表B中也有这个字段(身份证号),这里的身份证号一定来自表A同样字段里的内容,但再B表中身份证号对应id可以 ...

  4. mysql存储过程返回多个值_数据库mysql存储过程之返回多个值的方法示例

    本文实例讲述了mysql存储过程之返回多个值的方法.分享给大家供大家参考,具体如下: mysql存储函数只返回一个值.要开发返回多个值的存储过程,需要使用带有INOUT或OUT参数的存储过程.咱们先来 ...

  5. mysql 表结构反转_一道经典的MySQL面试题,答案出现三次反转

    前几天偶然看到大家在讨论一道面试题,而且答案也不够统一,我感觉蛮有意思,在此就做一个解读,整个过程中确实会有几处反转. 我们先来看下题目: 一张表,里面有ID自增主键,当insert了17条记录之后, ...

  6. mysql索引增加栏位_mysql 添加索引 mysql 如何创建索引

    1.添加PRIMARY KEY(主键索引) mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) 2.添加UNIQUE(唯一索引 ...

  7. oracle mysql 数据类型对比_Oracle、SQL Server、MySQL数据类型对比

    1,标准SQL数据类型 BINARY 每个字符占一个字节 任何类型的数据都可存储在这种类型的字段中.不需数据转换(例如,转换到文本数据).数据输入二进制字段的方式决定了它的输出方式. BIT 1 个字 ...

  8. 浅谈 Redis 与 MySQL 的耦合性以及利用管道完成 MySQL 到 Redis 的高效迁移

    http://blog.csdn.net/dba_waterbin/article/details/8996872 ㈠ Redis 与 MySQL 的耦合性               在业务架构早期 ...

  9. linux mysql 查看字符集_Linux中查看和设置MySQL数据库字符集 一

    1.创建数据库指定数据库的字符集 mysql>create database mydb character set utf-8; 通过配置文件设置创建数据库时字符集: #vi /var/lib/ ...

最新文章

  1. mysql字段中ID值自动增长
  2. 翻译软件(用百度的API实现)Python
  3. Python_基础_4
  4. Cover V2将启用两条产品线 本周开始进行V2 UI开发
  5. 模型ks_风控建模 模型指标篇
  6. 由内而外 多项国产自主先进设计
  7. 暗影精灵3 黑苹果macOS BigSur 11.2.3 EFI
  8. html从谷歌浏览器跳转到IE,谷歌浏览器chrome
  9. 摆脱某某助手,使用无线投屏功能共享安卓屏幕到PC
  10. 当前的安全设置不允许从该位置下载文件
  11. 瑞幸突击2018,一场互联网向咖啡发起的进攻 | 一点财经
  12. 全球制造业“看上去很美”
  13. 怎么用计算机测出来体脂,如何测自己的体脂率?
  14. 苹果成立45周年,库克发文再次追忆乔布斯
  15. 中科柏诚与知名上市公司南天信息(000948)签署战略合作协议
  16. 小红书KOC和KOL这两者怎样进行投放?
  17. iMazing2023官网中文版下载及许可证附使用教程
  18. 自然语言处理nlp:SnowNLP自主训练情感分析模型
  19. (六)类和对象(二)const
  20. html 按键检测,js如何检测键盘按键的ascii码?

热门文章

  1. Redis HyperLogLog常用命令
  2. android studio viewo,Android Studio 之 ViewModel
  3. Css内边距与外边距
  4. 用一个参数化的模型来投影点
  5. Appium+Python安卓自动化测试之启动APP和配置获取
  6. 全网都在看的Fiddler、mitmproxy抓包秘籍,花钱都买不到
  7. 【Python】pandas模块中更改Series的数据类型
  8. NickLee 多層菜單
  9. mysql if--else
  10. linux运维、架构之路-HAProxy反向代理