错误原因:部分微信用户名使用不规范的文字(如图片,表情包等),超出utf8存储范围

解决方案:

1.将含有特殊字符的信息过滤掉然后进保存

nickName.toString().replaceAll("[\\x{10000}-\\x{10FFFF}]", "")

2.对mysql进行特殊设置,需mysql5.5.2以上版本才支持,但不是每次都有效,比较繁琐,建议安装数据库时选择utf8mb4字符集

第一步:找到你的mysql的配置文件,一般叫my.cnf,打开之后全局搜索 character 关键词,可以搜索出很包含这个字符的信息,这个是设置字符编码的,让他们的值都等于utf8mb4,例如:default-character-set=utf8mb4。

第二步:修改表列的字符集,把你现有表的字符集全部改为utf8mb4编码。

3.对nickname进行编码,编码完成之后保存到数据库当中。这样做的好处是不会损失细节,方便操作,只需要对数据进行一行代码的编码,坏处是不能直接阅读,并且在用到nickname的时候一定要记得先进行解码。

后端方案:

 import org.apache.commons.codec.binary.Base64;String nickname = jsonObject.getString("nickname");nickname =Base64.encodeBase64String(nickname.getBytes("UTF-8"));//进行编码nickname = new String(Base64.decodeBase64(nickname),"UTF-8"); //进行解码

前端方案:(数据需要在HTML页面进行Base64编码和解码)

/*** Base64 encode / decode
*/
function Base64() {// private property_keyStr ="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";// public method for encodingthis.encode = function (input) {var output = "";var chr1, chr2, chr3, enc1, enc2, enc3, enc4;var i = 0;input = _utf8_encode(input);while (i < input.length) {chr1 = input.charCodeAt(i++);chr2 = input.charCodeAt(i++);chr3 = input.charCodeAt(i++);enc1 = chr1 >> 2;enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);enc4 = chr3 & 63;if (isNaN(chr2)) {enc3 = enc4 = 64;} else if (isNaN(chr3)) {enc4 = 64;}output = output +_keyStr.charAt(enc1) + _keyStr.charAt(enc2) +_keyStr.charAt(enc3) + _keyStr.charAt(enc4);}return output;}// public method for decodingthis.decode = function (input) {var output = "";var chr1, chr2, chr3;var enc1, enc2, enc3, enc4;var i = 0;input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");while (i < input.length) {enc1 = _keyStr.indexOf(input.charAt(i++));enc2 = _keyStr.indexOf(input.charAt(i++));enc3 = _keyStr.indexOf(input.charAt(i++));enc4 = _keyStr.indexOf(input.charAt(i++));chr1 = (enc1 << 2) | (enc2 >> 4);chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);chr3 = ((enc3 & 3) << 6) | enc4;output = output + String.fromCharCode(chr1);if (enc3 != 64) {output = output + String.fromCharCode(chr2);}if (enc4 != 64) {output = output + String.fromCharCode(chr3);}}output = _utf8_decode(output);return output;}// private method for UTF-8 encoding_utf8_encode = function (string) {string = string.replace(/\r\n/g, "\n");var utftext = "";for (var n = 0; n < string.length; n++) {var c = string.charCodeAt(n);if (c < 128) {utftext += String.fromCharCode(c);} else if ((c > 127) && (c < 2048)) {utftext += String.fromCharCode((c >> 6) | 192);utftext += String.fromCharCode((c & 63) | 128);} else {utftext += String.fromCharCode((c >> 12) | 224);utftext += String.fromCharCode(((c >> 6) & 63) | 128);utftext += String.fromCharCode((c & 63) | 128);}}return utftext;}// private method for UTF-8 decoding_utf8_decode = function (utftext) {var string = "";var i = 0;var c = c1 = c2 = 0;while (i < utftext.length) {c = utftext.charCodeAt(i);if (c < 128) {string += String.fromCharCode(c);i++;} else if ((c > 191) && (c < 224)) {c2 = utftext.charCodeAt(i + 1);string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));i += 2;} else {c2 = utftext.charCodeAt(i + 1);c3 = utftext.charCodeAt(i + 2);string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));i += 3;}}return string;}}//1.加密
var str = '需要加解密的内容';
var base = new Base64();
var result = base.encode(str);
//2.解密
var result2 = base.decode(result);

一.mysql数据库保存微信用户名报错相关推荐

  1. mysql数据库binlog日志截断报错,导致mysql主从同步失败故障排查

    mysql数据库binlog日志截断报错,导致mysql主从同步失败故障排查 Got fatal error 1236 from master when reading data from binar ...

  2. MySQL数据库安装步骤及报错1251解决方法

    MySQL数据库安装 MySQL是一种关系数据库管理系统,所使用的 SQL 语言是用于访问数据库的最常用的标准化语言,其特点为体积小.速度快.总体拥有成本低,尤其是开放源码这一特点,在 Web应用方面 ...

  3. mysql数据库保存微信emoji表情转义

    /** 过滤表情* */public function parseEmojiTounicode($stremoji){$text = preg_replace_callback('/[\xf0-\xf ...

  4. mysql的代码需要保存吗_php向Mysql数据库保存数据的代码

    php向Mysql数据库保存数据的代码 PHP如何向MySQL数据库中写入数据你知道吗?你对PHP向MySQL数据库中写入数据了解吗?下面是小编为大家带来的php向Mysql数据库保存数据的`代码,欢 ...

  5. sqlyog for MySQL远程连接的时候报错mysql 1130的解决方法

    通过Navicat for MySQL远程连接的时候报错mysql 1130的解决方法 今天在用远程连接Mysql服务器的数据库,不管怎么弄都是连接不到. 错误代码是1130,ERROR 1130: ...

  6. linux mysql 登录报1045_【mysql】linux登录MySQL_报错ERROR_1045_(28000)解决办法

    [mysql]linux登录MySQL_报错ERROR_1045_(28000)解决办法 5年前 (2015-09-17)    作者:Jiaozn    分类:MySQL    阅读次数:1852 ...

  7. mysql unknown variable basedir_mysql登陆报错mysql: unknown variable 'basedir=

    mysql登陆报错mysql: unknown variable 'basedir= 发布时间:2020-08-10 13:01:16 来源:ITPUB博客 阅读:67 作者:feelpurple 使 ...

  8. 解决达梦数据库新增大字段报错问题

    解决达梦数据库新增大字段报错问题 参考文章: (1)解决达梦数据库新增大字段报错问题 (2)https://www.cnblogs.com/nihaorz/p/11804891.html 备忘一下.

  9. 微信支付报错:统一下单和拉起支付的appid不一致(原创)

    微信支付报错:统一下单和拉起支付的appid不一致 错误码:-2 提示参考: 参考统一下单的API (谦信君原创,转载请注明来源) 原因排查: 我们做的是APP微信支付 客户端向我服务端发请求,获取预 ...

最新文章

  1. OpenCL2.0特性之SVM
  2. Redis之压缩链表ziplist
  3. zxing二维码生成工具类
  4. Codeforces Round #408 (Div. 2)
  5. 文件上传至将File转换成MultiPartFile
  6. ios kvo 要引入_iOS多线程之超实用理论+demo演示(可下载)
  7. [SDOI2017]遗忘的集合
  8. SQL基础之 基本属性和运算 (一)
  9. android if else,Android对很多if和else条件
  10. NB-IOT:系列专题1:低功耗能力
  11. hibernate 逆向工程对数据库进行CRUD操作
  12. Typora免费版官网下载
  13. DTU有什么用?是怎样工作的?
  14. ResourceManager HA 配置
  15. CF Canada Cup 2016 D 优先队列
  16. python 获取节假日,二十四节气,中国农历,星次、每日凶煞、每日值神、农历建除十二神、农历每日宜忌、彭祖百忌、每日五行、二十八星宿、天干地支、农历生辰八字、时辰凶吉等
  17. python 爬虫:爬取91job竞赛题库
  18. IOS按钮排列自动换行
  19. github简易教程
  20. PCB板布线经验~~

热门文章

  1. 账外“公对私”结算薪资有风险,灵活用工助力企业税务合规
  2. 软件工程实践作业---软件评测
  3. nvme分区选mbr还是guid_关于EFI系统分区(ESP)你应该知道的3件事
  4. 使用谷歌地图规划骑行路线
  5. 怎么用命令行进入mysql
  6. GitHub个人仓库的创建以及新建文件和上传文件
  7. 【wps】插入表格里的文字居中
  8. Win8预览版新特性与应用技巧
  9. 一、《无限法则》雪地逃杀模式
  10. 【Python】Python库