概述:

最近一个项目中调用同事封装的一个微信获取信息接口并处理字段存入数据库处理的功能接口,功能测试阶段发现关注公众号信息并没有成功返回,而且情况是一些账号是正常的,一些人却是有问题的,针对有问题的用户查看日志发现微信官方返回的关注状态与同事接口返回的内容不符合,也就是说没有正常更新到。日志记录相关SQL,插入数据库才发现是微信的emjoy符号导致出现问题。

mysql报错内容:

根据上图看见,是mysql对特殊号的报错。

方案概况:

针对符号的报错,搜索了有没有解决方案,并且发现了有两个解决方法。

  1. 修改mysql的编码。

  2. 对字符过滤后再插入数据库

具体方案:

1、修改mysql的编码:

Mysql的utf8编码最多3个字节,而Emoji表情或者某些特殊字符是4个字节。因此我们需要修改编码能接受4个字节的,例如utf8mb4。

  1. 在mysql的安装目录下找到my.ini,作如下修改:[mysqld] character-set-server=utf8mb4 [mysql] default-character-set=utf8mb4

  2. 重启mysql服务

  3. 修改表 ALTER TABLE 表名 CONVERT TO CHARACTER SET utf8mb4 COLLATE  utf8mb4_bin;

2、特殊字符过滤:

其实很多时候数据库中储存的微信昵称完整性不是特别重要,例如:“小蕾??”’ 保存为“小蕾” ,可以考虑直接过滤特殊字符,这样的优点是不用担心修改mysql编码过程中造成其他错误。

//微信特殊字符过滤
private function wx_name_filter($str) {$name = $str;$name = preg_replace('/\xEE[\x80-\xBF][\x80-\xBF]|\xEF[\x81-\x83][\x80-\xBF]/', '', $name);$name = preg_replace('/xE0[x80-x9F][x80-xBF]‘.‘|xED[xA0-xBF][x80-xBF]/S','?', $name);$return = json_decode(preg_replace("#(\\\ud[0-9a-f]{3})#ie","",json_encode($name)));if(!$return){return $this->jsonName($return);}return $str;
}

总结:

个人业务原因采取了过滤字符方案,并且生效了,其实两种方法都挺方便易懂的,主要是看自己需求,如果项目中太多需要修改的地方,那么修改mysql编码方案也不失为一种好方法,当然要注意小心操作。

PS:记录一下更改数据库格式的代码

show full columns from blog_member;
-- show variables like '%char%';
-- ALTER TABLE blog_employee CHANGE nickname nickname VARCHAR(255)  CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- ALTER TABLE blog_employee CHANGE name name VARCHAR(255)  CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE blog_member CHANGE nickname nickname VARCHAR(255)  CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- ALTER TABLE blog_member CHANGE nickname nickname VARCHAR(255)  CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- ALTER TABLE blog_member nickname CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- set global innodb_file_format = BARRACUDA;
-- set global innodb_large_prefix = ON;
-- show variables like 'character%';
-- show variables like 'collation_%';
-- show variables like 'innodb_large_prefix';
-- show variables like 'innodb_file_format';

最后修改mysql配置文件并且重启才真正生效

my.cnf一般在etc/mysql/my.cnf位置。找到后请在以下三部分里添加如下内容:

[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'

求一键三连:点赞、转发、在看

解决微信emjoy特殊符号插入数据库出错相关推荐

  1. 编码-数据库不支持特殊符号,特殊符号插入数据库报错解决方法

    一般字符串我们都是用UTF8得字符集 今天遇到了一个问题,特殊符号在插入数据库得时候报错了 同事跟我说是字符集得问题,utf8改为utf8mb4就可以了 接下来我们来说说原因: mysql支持的 ut ...

  2. php mysql 微信昵称_php 解决微信昵称emoji表情插入MySQL报错

    在PHP接受到微信用户昵称入库的时候报错 原因:utf-8 最大3个字节,而emoji占4个字节 解决办法: 1.修改mysql 数据库的字符集,改为utf8mb4,但是前提是MySQL的版本需要5. ...

  3. 解决微信昵称特殊字符保存到数据库问题

    背景:小程序项目:每次用户进入到微信小程序登陆,需要实时保留前端传送的微信昵称保存到数据库,用以之后一些功能展示. 问题:有一些微信用户昵称名字有特殊符号如表情这些.当保存该用户时会出现数据库处理异常 ...

  4. 解决微信昵称含有表情符号等插入到数据库报错问题

    一.开发环境:客户端小程序+java后端+mysql5.6+windows 二.问题抛出:当java后端后去微信用户昵称(带有表情符号的),插入到mysql数据库的时候会报类似错误如下: SQL st ...

  5. Mysql解决微信特殊符号昵称入库报错乱码

    Mysql解决微信特殊符号昵称入库报错乱码 目录: Mysql解决微信特殊符号昵称入库报错乱码 环境声明 思考乱码原因 怎么解决 解决自己代码和微信编码统一 解决代码传输到数据库,序列化反序列化问题 ...

  6. 成功解决:连接sql server时插入数据库内容为乱码,并且输出也为乱码

    成功解决:连接sql server时插入数据库内容为乱码,并且输出也为乱码 目录 解决问题 解决办法 解决问题 pymssql连接数据库,插入记录显示乱码,python输出也乱码 连接语句 conn ...

  7. 【转】编写微信聊天机器人4《聊天精灵WeChatGenius》:实时获取到微信聊天消息,hook数据库插入操作。...

    接上篇,使用Xposed来hook微信,找到微信进程:https://blog.csdn.net/weixin_42127613/article/details/81839537 既然已经找到了微信进 ...

  8. Java向数据库中插入数据出错时怎么避免插入错误数据

    Java向数据库中插入数据出错时怎么避免插入错误数据 对于初学者,向数据库写数据时,当程序输错,会有错误的数据写入了数据库,这是可以用捕获异常回滚的方法避免这种情况的发生 代码如下: /** 完成增删 ...

  9. 编写微信聊天机器人4《聊天精灵WeChatGenius》:实时获取到微信聊天消息,hook数据库插入操作。

    接上篇,使用Xposed来hook微信,找到微信进程:https://blog.csdn.net/weixin_42127613/article/details/81839537 既然已经找到了微信进 ...

  10. 继解决Spring data jpa 批量插入重写saveAll()后遇到符号不兼容问题

    问题描述 问题: 之前为解决Spring data jpa 批量插入/删除(saveAll()/deleteAll())速度慢的问题 重写了saveAll()方法,用自定义拼接sql的方法组装sql, ...

最新文章

  1. FOSCommentBundle功能包:与FOSUserBundle集成
  2. Git之不明觉厉11-利其器source tree
  3. 3.1 基础-抛小球
  4. 【Python】Matplotlib太臃肿,试试Seaborn
  5. java securt 视频,SecureRandom在Java中安全种子
  6. 用程序猿思维、程序设计师思维两种方式写求斐波那契数列的方法。
  7. 【Java】总结Java数组的拷贝和输出
  8. C/C++线程与多线程工作笔记0004---认识C中的线程和多线程
  9. 查看docker run启动参数命令 runlike
  10. IPTV系统视频直播点播软硬件一体化方案OEM盒子
  11. 七牛 html 上传,在七牛上传之后如何自己自定义上传完成处理并在页面显示。_html/css_WEB-ITnose...
  12. PR剪辑视频画面翻转缩放滑动特效转场PR预设
  13. 消费者人群画像—信用智能评分 比赛回顾
  14. el-table大数据量渲染卡顿的一种思路
  15. p3c 插件,是怎么检查出你那屎山的代码?
  16. 如何从T-SNE或Umap中找到你想要的点?
  17. 什么是「中华田园敏捷开发」,人才
  18. Python网络爬虫实战:抓取和分析天猫胸罩销售数据
  19. PUSHmall 推贴订货商城系统 — — B2B/B2C批发零售采销模式,商贸流通企业最佳电商解决方案
  20. 那些精贵的文献资源下载网址经验总结(转载)

热门文章

  1. 2、sudo时候出现no valid sudoers sources found, quitting
  2. Xlookup、Vlookup请走开,万能的Wlookup函数来了!
  3. 【沃顿商学院学习笔记】商业基础——Financing:02 年金 Annuity
  4. html5 dreamlive,DREAM LIVE 5th Tour Stargazer即将开演
  5. MVP是什么,不是什么
  6. python123货币转换器_Python货币换算I,Python123python,转换
  7. 使用VLC在web页面显示海康威视实时监控
  8. 卡贴机被“全面封杀”?苹果关闭有锁iPhone的ICCID激活服务
  9. Android新浪微博分页加载,Android仿新浪微博分页管理界面(3)
  10. Visual Studio 2019 编译报错:错误 CS2012 无法打开 obj\Debug\xx.exe”进行写入 --“对路径xx.exe”的访问被拒绝)解决方法