将数据库的编码设置为utf8mb4_general_ci
然后在yii2的数据库连接的charset配置成utf8mb4
参考内容:
今天在写微信公众平台项目时,写到一个用户管理模块,接口神马的已经调试好了,于是将用户从微信服务器保存到本地数据库,发现报错:
java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x94' for column 'nickname' at row 1
大致说的是保存nickname字段时,发现不正确的字符串值,于是在保存前,将用户的昵称打印了出来,发现有emoji表情,上网查了一下,utf-8大小可能有三种分别为2字节、3字节、4字节,而Mysql中的utf-8编码格式最多支持3字节,所以需要升级Mysql版本及编码格式:
Luckily, MySQL 5.5.3 (released in early 2010) introduced a new encoding called utf8mb4 which maps to proper UTF-8 and thus fully supports Unicode, including astral symbols.
也就是mysql在5.5.3版本中引入新的编码格式,取名为utf8mb4,所以如果你电脑上的版本低于此版本,请先更新电脑中的Mysql版本,查看Mysql版本:
mysql -V mysql Ver 14.14 Distrib 5.6.23, for osx10.9 (x86_64) using EditLine wrapper
发现电脑中的版本没问题,于是直接找改编码格式的方法:
Make sure to set the client and server character set as well. I have the following in my MySQL configuration file (/etc/my.cnf):
于是去查找my.cnf文件所在的方位,在我电脑中路径为(用homebrew安装的)
/usr/local/Cellar/mysql/5.6.23/my.cnf
用sudo vim打开该文件:
$ sudo vim 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
重启mysql服务,查看编码格式
mysql> SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%'; +--------------------------+--------------------+ | Variable_name | Value | +--------------------------+--------------------+ | character_set_client | utf8mb4 | | character_set_connection | utf8mb4 | | character_set_database | utf8mb4 | | character_set_filesystem | binary | | character_set_results | utf8mb4 | | character_set_server | utf8mb4 | | character_set_system | utf8 | | collation_connection | utf8mb4_unicode_ci | | collation_database | utf8mb4_unicode_ci | | collation_server | utf8mb4_unicode_ci | +--------------------------+--------------------+ 10 rows in set (0.00 sec)
发现已经设置成功,于是重新启动程序,发现还是报错,错误还是刚才的错误,这下可以确定问题不在数据库的编码格式中了,于是继续找答案,发现jdbc驱动有问题,当前程序中的驱动版本:
mysql-connector-java-5.1.7-bin.jar
于是去mysql官网找最新jdbc驱动,地址:
http://dev.mysql.com/downloads/file.php?id=456317
版本:
mysql-connector-java-5.1.35-bin.jar
心想这下应该可以了吧,重新启动程序,我靠! 发现还报错,继续是刚才的错误,这下只能找找hibernate配置文件中是否有问题了,hibernate配置文件中的连接地址为:
jdbc:mysql:///wechat_development?useUnicode=true&characterEncoding=utf8
上stackoverflow中找了找解决方案,里面也没说为何,直接说把后面的useUnicode及characterEncoding直接去掉就好了,于是配置文件变成如下:
jdbc:mysql:///wechat_development
继续重新启动程序,这下真的保存成功了,而且表情都在~~~~ oh ye
相关推荐
Emoji表情或者某些特殊字符是4个字节,而Mysql的utf8编码最多3个字节,所以数据插不进去。 Cause: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x8C\xB7' for column 'nickname' at row 1 解决方案 ...
背景 疫情期间由于丧心病狂的业主爸爸要求每小时报道一次,所以写了一下脚本 import schedule import time import itchat ...print(groups_list[i]['NickName'],groups_list[i]['MemberCount'],人)
微信订餐系统eims_wxdc v2.0 build20140717 更新说明: 1、去掉了礼品模块 2、简化了商家管理 3、商家与菜单添加了排序 4、订单添加了回收站 5、优化了获取JSON数据 6、添加了Refresh_token增加授权有效期 7...
微信小程序个人简历制作,传统的简历以一个文档的形式存在,现如今可以借助微信小程序平台制作个性化的简历。<!--index.wxml--> !hasUserInfo && canIUse}}" open-type="getUserInfo" bindgetuserinfo=...
inc/conn.asp 的安装路径 此程序需要绑定微信服务号[微信浏览器才能打开],因为测试需要,固定了绑定账号 正式使用时: 请去掉 inc/conn.asp 的: nickname="eims" openid="eims" 同时打开 api/0.asp 配置微信服务号...
微信授权获取用户基本信息 //nickname = outputObj1["nickname"].ToString(); //昵称 //sex = outputObj1["sex"].ToString(); //性别 headimgurl = outputObj1["headimgurl"].ToString(); //头像url //province ...
Bmob-wechatApp-xinyou 小程序名称为心邮,这是一款发布日志和心情的小程序。用来倾诉烦恼、分享快乐。... (1)在_User表中新建字段userPic(String),nickname(String) (2)新建Diary表,新建字段title(String),publis
Response.Write("用户OPENID:" + OAuthUser_Model.openid + " 用户昵称:" + OAuthUser_Model.nickname + " 性别:" + OAuthUser_Model.sex + " 所在省:" + OAuthUser_Model.province + " 所在市:" + ...
Wechatext为非官方微信发送API * 注: 用户id为通过getMsg()方法获取的FakeId值 * 主要实现如下功能: * send($id,$content) 向某用户id发送微信文字信息 * getUserList($page,$pagesize,$group) 获取用户信息 * ...
asp.net C#开发,基于微信公众平台网页授权获取用户基本信息源代码
Delphi XE7 Indy的IdHTTP写的微信公众平台,只做了部分功能,希望大家能用上 temp := JSONObject.Values['subscribe'].ToString; Memo1.Lines.Add('subscribe:' + temp); temp := JSONObject.Values['openid']....
ipone5s中昵称输入“emoji 表情”,保存数据库有问题。 Caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x8E\x80\xE5\xA4...' for column 'nickname' at row 1
`nickname` varchar(100) COLLATE utf8_unicode_ci DEFAULT '', `login_account` varchar(50) COLLATE utf8_unicode_ci DEFAULT '', `login_password` varchar(50) COLLATE utf8_unicode_ci DEFAULT '', `login_...
基于Java的微信机器人.zip How to use action:sendMessage https://sekiro.virjar.com/invoke?group=wx_robot&action=sendMessage&content=哈哈哈哈&receiverNickname=Blanke&atWechatIds=&isGroup=false&...
Bmob-wechatApp-xinyou 小程序名称为心邮,这是一款发布日志和心情的小程序。用来倾诉烦恼、分享快乐。... (1)在_User表中新建字段userPic(String),nickname(String) (2)新建Diary表,新建字段title(String),publis
$nickname = $userInfo['nickname'];//获取昵称 $sex = $userInfo['sex']; //获取性别 $city = $userInfo['city'];//获取用户所在城市 $headimgurl = $userInfo['headimgurl'];//获取用户头像 ...
微信公众平台 网页授权获取用户基本信息 //获取从wxProcess.aspx传递过来的跳转地址reurl if (Request.QueryString["reurl"] != null && Request.QueryString["reurl"] != "") { reurl = Request.QueryString["re...
5. } 6. }) 5. // 获取用户信息 9. let nickName = resp.userInfo.nickName
最近有机会做到一个微信项目;把其中自己整理的笔记分享给大家,有不足或错误的地方望大家指正! 1关于微信授权这块的流程图,如下 一些代码碎片仅供参考: var myNickname; var myHeadimgurl; var activityId; ...