【工作问题】Mysql数据库隐形空格导致的BUG

6 篇文章 0 订阅
5 篇文章 0 订阅
【工作问题】Mysql数据库隐形不显示空格导致的BUG

今天工作中需批量导入手机号码等数据,写了个判断手机号码String.length()不为11位的写入到错误文件中。过程还算顺利,大部分号码是对的,但是结果中出现两个我"确定"为11位的手机号码"158XXXX8403",无论是Mysql数据库中还是idea,点击复制都是妥妥的"11"位,前后确定没有空格!真是百思不得其解。

然后写了个System.out.println("手机号".length()),看看这个号码测出来不是11位是多少位?

结果打印出来12位。

%()&&@#@#什么鬼啊,我当时觉得我是眼睛花了吗,手机号码多少位都数不清楚了?

不信邪的我然后直接把数据库里的这个号码复制出来到idea想再数数到底多少位,结果奇怪的事情就发生了:

在这里插入图片描述
等等,这个手机后面的**\u202C**是什么鬼?我非常确定数据库这个字段是没有后面的东西的,于是我上网一搜,有同学遇到了同样的问题:

unicode编码导致的问题:从excel或wps表格直接复制到数据库中,然后保存。

会有可能出现**"\u202d136xxxxx16\u202c", “159xxxxx67”,"\u202d136xxxxx31"**这样的附加"奖励",且复制粘贴是根本看不出来任何问题的。

猜测

至于为什么idea能把隐形的\u202C显示出来,我猜是因为我的idea用的GBK编码,而GBK编码里没有\u202C,也就是Unicode里\u202C这个表示隐形空格的编码在GBK里是没有正确表示的,因此GBK只能将\u202C原型毕露。

而Mysql的不管是UTF-8mb64还是UTF-8都是在Unicode基础之上定义的。根据Unicode中字符的编码位置,能找到对应的utf-8编码,所以UTF-8也就是MySQL可以正确"显示"这个隐形空格(差点怀疑人生)。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值