【转载】Mysql 不可见字符E280AA和E280AC(华为手机自带邮箱客户端拷贝SQL的问题)

Mysql 不可见字符,使用like可以查询到,使用等于号查询不到。前后不可见字符E280AA和E280AC.

数据库和表编码:utf8mb4

先看个有问题的SQL,这个SQL看着是真没有问题。执行也能正常进行更新。

1[sql]

UPDATE`t_member` SET`phone` = '159XXXX3048'WHERE`id` = 1

但是更新后,使用以下语句就是查不到

1[sql]

select* fromt_member wherephone = '159XXXX3048';

使用like '%159XXXX3048%'就能查询到,所以博主怀疑是前后有不可见字符。 那么如何确定呢

拷贝上边update语句的手机号,我们一个一个的进行删除,你就会发现前后会多出一次回车,都是在单引号里边

1[sql]

'159XXXX3048'

好了,废话不多说,我们来看看这个不可见字符是什么吧

执行一下以下语句

1[sql]

selecthex(phone) fromt_member whereid = 1;

打印字符为

1[plain]

E280AA3135395858585833303438E280AC

然后我们将结果保存下来,等会对比一下

我们现在执行一下正常的手机号,update语句

1[sql]

UPDATE`t_member` SET`phone` = '159XXXX3048'WHERE`id` = 1

再执行一下以下语句

1[sql]

selecthex(phone) fromt_member whereid = 1;

观看结果

1[plain]

3135395858585833303438

我们将结果对比一下

1

2

[plain]

E280AA3135395858585833303438E280AC

      3135395858585833303438

是不是发现前后各有一串字符,E280AA 和 E280AC

其实这俩是个十六进制字符,我们使用系统自带计算器将其转换成十进制字符,然后替换就可以解决了。

比如下图,我的转换方式

如上图所示:点击10,转换成 14844074,相同,E280AC 转换成 14844076

然后使用下边的语句进行替换。

1[sql]

updatet_member setphone = replace(phone, CHAR(14844074),''), phone = replace(phone, CHAR(14844076),'') whereid = 1;

替换后我们再查询就没问题了。

至于为什么会发生这种情况,博主初步分析是华为手机自带邮箱客户端拷贝的问题。

原文

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,451评论 0 9
  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 5,671评论 0 4
  • 今天看到一位朋友写的mysql笔记总结,觉得写的很详细很用心,这里转载一下,供大家参考下,也希望大家能关注他原文地...
    信仰与初衷阅读 4,761评论 0 30
  • http://www.itpub.net/thread-1393352-1-1.htmlhi,看到你关于数据库存储...
    yahzon阅读 605评论 1 0
  • 16年9月份的时候,因为没什么事情做,对寒假也没有什么打算,于是想起一名同乡的师兄两年前去过非洲当志愿者。想想也是...
    谢桐阅读 487评论 0 0