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

解决emoji表情插入数据库报错问题 在富文本中添加emoji表情,再存入数据数据时,会报sql异常。 org.springframework.jdbc.UncategorizedSQLException: ### Error updating database. Cause: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x8C\xB9\xF0\x9F...... 阅读详情

概述:

最近一个项目中调用同事封装的一个微信获取信息接口并处理字段存入数据库处理的功能接口,功能测试阶段发现关注公众号信息并没有成功返回,而且情况是一些账号是正常的,一些人却是有问题的,针对有问题的用户查看日志发现微信官方返回的关注状态与同事接口返回的内容不符合,也就是说没有正常更新到。日志记录相关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'
PHP百万级数据导出方案(多csv文件压缩) 概述:最近公司项目要求把数据除了页面输出也希望有导出功能,虽然之前也做过几个导出功能,但这次数据量相对比较大,差不多一天数据就20W条,要求导7天或者30天,那么数据量就轻松破百万了甚至破千万,因此开发的过程中发现了一些大数据导出的坑,在此跟大家分享一下,互相学习。准备:1、PHP设置坑: set_time_limit – 设置脚本最大执行时间: 此配置一般PHP默认是30秒,如果你是数据小的,可 阅读详情

相关推荐

插入数据库之前将特殊字符转义

NULL 博文链接:https://yxwang0615.iteye.com/blog/1045770

解决办法之如何让emoji存放到数据库中

问题描述 客户端存储表情符号的时候数据库存储不进去 问题原因 我们将数据库与表的的字符类型都设置为utf8 原来utf8可能是2或3或4个字节,而mysql的utf8是3个字节,存放一个emoji是需要4个字节的,自然不够。导致了错误 问题处理 第一种:数据库处理 思路:修改数据库的字符集 修改数据库的配置文件(/etc/mysql中):mysql.conf 或者 my.ini,不同的数据库可能会不一样,根据实际情况进行修改 [mysqld] character-set-server=utf8mb4 进

weixin_42272869的博客 1028

微信昵称带符号导致插入MySQL数据库时出错的解决方案

Mysql的utf8编码最多3个字节,而Emoji表情或者某些特殊字符是4个字节,所以会导致带有表情的昵称插入数据库时出错,下面给大家分享下解决方案,需要的朋友参考下吧

MySql表中添加emoji表情无法插入的解决方法

MySql表中添加emoji表情无法插入的解决方法

wszhm123的博客 1899

AD9026芯片开发实战指南:从硬件配置到射频校准

本文为AD9026芯片开发实战指南,详细解析了从硬件设计、电源时钟配置、SPI初始化到多芯片同步与JESD204高速链路建立的完整流程。重点探讨了射频校准技术,包括初始化校准与跟踪校准,以保障5G、MIMO等现代通信系统所需的射频性能。旨在帮助开发者系统掌握这颗高性能射频收发器的应用,规避常见设计陷阱。

tomato的博客 851

STM32的GPS数据提取程序设计说明——基于NMEA0183协议

一、硬软件平台 本次程序实现效果为对GPS信号穿送来的数据进行筛选,并将筛选后的信息通过上位机显示出来,所以此次设计所需硬件包括STM32F407、RS232转TTL、CH340USB转串口模块,注意该模块在使用前,对应的系统需要安装驱动,否则串口调试助手无法识别,另外还包括JLink下载器。 本次代码设计软件为KEIL5并结合F4固件包,上位机系统为WIN7,主机系统为WIN10。 二、算法总体思路设计 由于GPS通过RS232将数据传送给板子,因此使用两个串口资源(串口1和串口2),其中一个用来

小景的博客 6181

关于mysql数据库中插入特殊字符(emoji表情)报错1366的问题注意点

emo字符存储到mysql

qq_39104075的博客 2133

ESP32-P4实战:LVGL V9.4 PPA加速配置与性能对比

本文详细介绍了如何在ESP32-P4平台上配置LVGL V9.4的PPA硬件加速功能,通过启用PPA加速显著提升图形处理性能并降低CPU占用率。文章包含环境准备、配置步骤、性能对比及常见问题解决方案,帮助开发者高效利用ESP32-P4的PPA加速器优化嵌入式GUI应用。

rice5的博客 1190

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

一般字符串我们都是用UTF8得字符集 今天遇到了一个问题,特殊符号在插入数据库得时候报错了 同事跟我说是字符集得问题,utf8改为utf8mb4就可以了 接下来我们来说说原因: mysql支持的 utf8 编码最大字符长度为 3 字节,如果遇到 4 字节的宽字符就会插入异常了。 那utf8mb4和utf8有什么区别呢? MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就...

luohao_的博客 4790

学Simulink——四开关 Buck‑Boost(FSBB)变换器的无缝模式切换仿真

本文详细介绍了使用Simulink实现四开关Buck-Boost(FSBB)变换器无缝模式切换的仿真方法。FSBB变换器因其输入输出同极性、单电感和双向能量流特性,广泛应用于光伏储能、USB-PD和车载电源等场景。文章重点解决了模式切换中的直通风险和占空比跳变问题,通过统一电压PI控制、Stateflow模式仲裁和200ns死区设计,实现了Buck(26V→24V)、Pass-Through(24V±1V)和Boost(22V)三种工作模式的无缝过渡。仿真结果显示输出电压稳定在12V±0.15V,切换过程无

amy_mhd的博客 66

JavaScript - Blob / File / base64 使用场景介绍与相互转换

前言 本文首先介绍一下这三种对象使用场景,最后介绍下它们之间互转格式的解决方案。 您前端一旦涉及到文件或图片上传到服务器, 就势必离不了Blob/File/base64三种主流的类型。 Blob MDN:https://developer.mozilla.org/zh-CN/docs/Web/API/Blob 您可以观察到,像一些图片处理插件(例如有名的vue-cropper)图片裁剪插件, 它们将图片处理完毕后,都将使用blob对象返回处理好的图片,供开发者用于上传服务器。

🏆 前端领域优质创作者 4493

特殊字符、符号写入数据库问题

【问题】 如上图所示,存在特殊字符,吸入数据库,会提示错误。 【解决方案】 最优方案:base64_encode() 后写入数据 取出数据 base64_decode() 还原。 编码格式:设置mysql字段为utf8mb4即可 函数过滤:用 str_replace() 函数替换制定字符 ...

sinat_28298075的博客 3618

uniapp(全端兼容) - 实现点击输入框时完美顶起键盘,获取键盘高度动态计算顶起距离,解决软键盘弹出时输入框被覆盖问题,uniapp微信小程序/移动端h5网页/安卓苹果app(示例代码,一键复制

uniapp,支付宝微信小程序,移动端H5网页网站,软键盘弹出位置不对,软键盘挡住了输入框怎么办,获取键盘高度计算弹出距离,uniapp如何解决输入框input激活后键盘弹出遮挡问题,uniapp输入框偶尔被键盘遮挡,解决uniapp在App环境下输入框被软键盘遮挡的问题,uniapp 完美解决苹果和安卓input框遮挡兼容问题,uniapp输入框拉起软键盘时,输入框显示不全,被软键盘挡住一半,input被键盘遮挡的解决方案,软键盘遮挡输入框,uniapp软键盘顶不起来输入框,输入框没有被软键盘弹出来怎么办

✅ 精选推荐文章 1万+

mysql插入特殊字符报错问题

ALTER TABLE 表名 MODIFY COLUMN 列名 varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' NOT NULL COMMENT '列1';ALTER TABLE 表名 DEFAULT CHARSET=utf8mb4;修改表和对应字段的编码。

qq_45382625的博客 507

安装anaconda3时出现错误:Failed to link extracted packages to D:\anaconda!...如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 1479

Imagenet数据集1000类别中英文

英文 {0: 'tench, Tinca tinca', 1: 'goldfish, Carassius auratus', 2: 'great white shark, white shark, man-eater, man-eating shark, Carcharodon carcharias', 3: 'tiger shark, Galeocerdo cuvieri', 4: 'hammerhead, hammerhead shark', 5: 'electric ray, cram.

识物专栏 1800

解决微信昵称特殊字符存放数据库报错问题

在做微信开发的时候,很容易遇到特殊字符的昵称,这样的昵称如果用普通的utf-8存放数据库就会报错,需要用utf-8mb4方式存储,单单修改这个是不够的 1.创建数据库的时候数据库编码utf-8mb4 表里对应的字段也是 2.window下找到my.ini文件  [client] no-beep default-character-set = utf8mb4 #

java小白的博客 1万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

微信昵称 mysql_MySQL数据库之解决微信昵称含特殊表情或字符无法存入数据库的异常问题...

本文主要向大家介绍了MySQL数据库之解决微信昵称含特殊表情或字符无法存入数据库的异常问题 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助。场景描述:保存微信用户昵称,发现昵称中包含特殊表情或字符,导致以下异常Causedby:java.sql.SQLException:Incorrectstringvalue:‘\xF0\x9F\x90\xAF’forcolu...

weixin_35253106的博客 1240

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

mysql插入特殊汉字、字符报错

这里写自定义目录标题报错信息 报错信息 java.sql.BatchUpdateException: Incorrect string value: '\xF0\xA7\x9D\x81\xE6\xB5...' for column 'completion_content' at row 1 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAcc

心猿意碼 1649

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

微信昵称带特殊字符保存数据库错误

改变昵称的字段类型,当然本身还得支持这种类型 如果使用框架的话,框架数据库配置也得改变一下,这里一ci框架为例 $db['default'] = array( 'dsn' => '', 'hostname' => '', 'username' => '', 'password' => '', 'database' =&g...

不看一的博客 5764

[BUG分享]搜狗浏览器地址栏输入特殊字符导致程序崩溃

搜狗浏览器1.0时由程序崩溃引申出的数据库相关测试点及SQL注入语句

Deadwalk的专栏 2291

数据中有emoji,导致插入不了数据库

前言 前两天负责的系统,因为需要获取用户的昵称并进行入库,但是有个别用户的昵称中存在emoji表情,导致入库时报错。 报错内容: java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\x92\x94‘ for column 问题原因 Q:为什么我们设置表的的字符类型为utf8却不能存放emoji呢? A:因为我们UTF-8编码可能是2或3或4个字节,但mysql中的utf8是3个字节,存放一个emoji是需要4个字节的,自然不够。 Mysql数据

苦行僧 4770

mysql处理微信表情_mysql保存不了微信表情符emoji问题解决方案

问题描述:当微信昵称中有emoji表情符时,mysql数据库报更新异常:java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x94' for colum n 'nickname' at row 1at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073) a...

weixin_34824634的博客 249

将特殊字符插入数据库

最近测试的发现有的插入数据库的信息会丢失,一直不清楚怎么回事;今天仔细看了下数据库才知道一些特殊字符是不能直接插入数据库的,比如单引号在数据库语句中表示引用其他字符,如果向数据库直接插入“Tom's cat”这样的字符串就会失败。 那么这种情况要怎么解决呢?查了一下资料一般有两种方案:一种是先对字符串进行转义,然后插入数据库,这是根本的解决方案;还有一种不那么“本质”但是相当漂亮的方法,先对字符

阿超的博客 7003
上一篇: 解决支付宝多次执行回调问题的思路分享
下一篇: 小程序上线小坑(网络异常!err:)
Tim_PHPer
博客等级 码龄11年 227粉丝 48原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值