美文网首页
【转载】Mysql 不可见字符E280AA和E280AC(华为手

【转载】Mysql 不可见字符E280AA和E280AC(华为手

作者: beihuang | 来源:发表于2019-09-30 16:07 被阅读0次

    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;

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

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

    原文

    相关文章

      网友评论

          本文标题:【转载】Mysql 不可见字符E280AA和E280AC(华为手

          本文链接:https://www.haomeiwen.com/subject/leeyjctx.html