mysql数据库:微信用户昵称emoji 怎么保存到数据库中。
我单位的小姐姐 也满逗的 每次测试微信公众号 总会报错。如下图:
java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\x91\xA7’ for colum n ‘nickname’ at row 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3593)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3525)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1986)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2140)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2620)
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1662)
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1581)
这个就很尴尬 所有人都可以正常登陆 唯独她不可以 慢慢排查发现是因为昵称中带有emoji 图片 额 好吧 来解决
经过百度 试了各种办法 只有这个挺可靠
mysql表字段定义为utf8mb4
`third_name` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '用户第三方账号昵称',
注意改成了“utf8mb4”,不再是utf8,主要是支持的字节数不同。
但是我试过发现也不OK 所以索性就写了一个工具类 用来过滤名字
package com.utils;
import org.apache.commons.lang.StringUtils;
/**过滤emoji工具*/
public class NickNameFilter {
/**检测是否有emoji字符
* 有的话抛出
* */
public static boolean containsEmoji(String source) {
if (StringUtils.isBlank(source)) {
return false;
}
int len = source.length();
for (int i = 0; i < len; i++) {
char codePoint = source.charAt(i);
if (isEmojiCharacter(codePoint)) {
//do nothing,判断到了这里表明,确认有表情字符
return true;
}
}
return false;
}
private static boolean isEmojiCharacter(char codePoint) {
return (codePoint == 0x0) ||
(codePoint == 0x9) ||
(codePoint == 0xA) ||
(codePoint == 0xD) ||
((codePoint >= 0x20) && (codePoint <= 0xD7FF)) ||
((codePoint >= 0xE000) && (codePoint <= 0xFFFD)) ||
((codePoint >= 0x10000) && (codePoint <= 0x10FFFF));
}
/**
* 过滤emoji 或者 其他非文字类型的字符
*
* @param source
* @return
*/
public static String filterEmoji(String source) {
source = source.replaceAll("[\\ud800\\udc00-\\udbff\\udfff\\ud800-\\udfff]", "*");
if (!containsEmoji(source)) {
return source;//如果不包含,直接返回
}
//到这里铁定包含
StringBuilder buf = null;
int len = source.length();
for (int i = 0; i < len; i++) {
char codePoint = source.charAt(i);
if (isEmojiCharacter(codePoint)) {
if (buf == null) {
buf = new StringBuilder(source.length());
}
buf.append(codePoint);
} else {
buf.append("*");
}
}
if (buf == null) {
return source;//如果没有找到 emoji表情,则返回源字符串
} else {
if (buf.length() == len) {//这里的意义在于尽可能少的toString,因为会重新生成字符串
buf = null;
return source;
} else {
return buf.toString();
}
}
}
}
就可以了
mysql数据库:微信用户昵称emoji 怎么保存到数据库中。相关推荐
- mysql存储用户昵称_mysql 微信用户昵称 emoji 完整保存 - 人人都是架构师
微信用户昵称现在丰富多样,一些个性的名称中经常包含有特殊字符,以及emoji表情.起先,我总以为mysql只能保存纯文本数据.但其实mysql(5.7版本)已非常强大,完整保存微信用户昵称(emoji ...
- mysql 微信昵称怎么保存_mysql 微信用户昵称emoji 完整保存
微信用户昵称现在丰富多样,一些个性的名称中经常包含有特殊字符,以及emoji表情.起先,我总以为mysql只能保存纯文本数据.但其实mysql(5.7版本)已非常强大,完整保存微信用户昵称(emoji ...
- 微信昵称 mysql_mysql 微信用户昵称emoji 完整保存
微信用户昵称现在丰富多样,一些个性的名称中经常包含有特殊字符,以及emoji表情.起先,我总以为MySQL只能保存纯文本数据.但其实mysql(5.7版本)已非常强大,完整保存微信用户昵称(emoji ...
- mysql 微信用户昵称 emoji 完整保存
微信用户昵称现在丰富多样,一些个性的名称中经常包含有特殊字符,以及emoji表情.起先,我总以为mysql只能保存纯文本数据.但其实mysql(5.7版本)已非常强大,完整保存微信用户昵称(emoji ...
- emoji昵称php,php过滤微信用户昵称emoji表情方法汇总 - 旗云号
php过滤微信用户昵称emoji表情方法汇总 微信用户昵称带emoji表情的话,保存数据库会报错,解决办法有两种:一.修改数据库表和字段的字符集为utf8mb4:二.过滤emoji表情字符:根据自己的 ...
- mysql 微信用户昵emoji 图标
mysql(5.7版本)可以进行保存,不需要在代码层面上解决 1.数据库改为ut8mb4 https://blog.csdn.net/poice00/article/details/52129351 ...
- 数据库被用户admin使用计算机,浙江大学远程教育——数据库技术离线作业第1次...
填空题: 注:空白下划线处为需要填充的部分.带下划线部分为考试时可能出题的部分,需要重点注意. 1.数据是信息的符号表示. 数据处理从某些已知的数据出发,推导加工出新的信息数据管理及其技术发展的阶段包 ...
- MS-SQL (sql server)添加数据库只读用户K3DBSQP,并遍历所有数据库添加访问只读访问权限
MS-SQL添加数据库只读用户K3DBSQP --添加只允许访问指定表的用户: exec sp_addlogin 'K3DBSQP','密码','master' --添加到数据库 ...
- java ipone 微信昵称emoji表情保存失败 无法存入数据库
问题描述:ipone5s中昵称输入"emoji 表情",保存数据库有问题. 运行环境:Java.Tomcat.mysql.Linux(我的Linux下为乱码,这个是linux问题) ...
最新文章
- 第十五届全国大学生智能汽车竞赛各分赛区国赛预选队伍成绩认定一览表
- 突变检测软件 测试数据库,合作文章|变异检测软件技能大PK,谁才是Battle King?...
- 特征值和特征向量(Eigenvalues and Eigenvectors)
- iphone连上wifi却上不了网_如何解决联通物联卡上不了网问题
- future 线程报错后_线程池运用实例——一次错误的多线程程序设计以及修复过程...
- 频域/s域/z域三大变换的性质对比
- Runtime使用单例模式,饿汉式
- .NET Core 已经实现了PHP JIT,现在PHP是.NET上的一门开发语言
- 前端学习(1427):ajax封装二
- EventEmitter
- java bar_Java Bar类代码示例
- java工厂模式定义宠物_Java设计模式之抽象工厂模式
- Libra 的 Move 语言初探,10 行代码实现你第一个智能合约
- NHibernate教程(14)--使用视图
- 我的CV实习工作总结
- 阮一峰老师-Auth 2.0 的一个简单解释
- 再见了,我的黄色文件夹(内置福利)
- todesk无法连接网络
- 电脑公司GHOST WIN7 SP1 2011装机旗舰版
- “傻瓜化”设计 甲骨文数据库机90分钟完成部署