将数据库的编码设置为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
相关推荐
import {Base64} from '../../utils/base...nickName = Base64.encode(nickName); //加密 console.log('nickNameEncoded'+nickName); // nickName = Base64.decode(nickName);//解密 // console.log('解密'+nickName);
Emoji表情或者某些特殊字符是4个字节,而Mysql的utf8编码最多3个字节,所以数据插不进去。 Cause: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x8C\xB7' for column 'nickname' at row 1 解决方案 ...
现在,你已经成功地获取到了微信用户的code、openid、名字(nickname)和头像URL(headimgurl)。这些信息可以存储在你的数据库中,以便后续使用。 在实际项目中,需要注意以下几点: - **安全处理**:确保你的...
4. `UserInfoServlet`:接收微信服务器回调的code,调用`OAuth2Client`获取用户信息,并将信息传递给JSP页面显示。 5. `jsp`文件:如`userinfo.jsp`,用于展示用户信息。 在实际使用中,你需要将`OAuth2Client`中的...
由于我们之前设置了`scope`为`snsapi_base`,只能获取到openid对应的微信用户基本信息(不包括昵称、头像等),如果需要这些信息,需在第一步设置`scope`为`snsapi_userinfo`。现在展示如何获取基本的用户信息: ``...
Python 语言结合 itchat 库为我们提供了一种方便的方式来实现微信的自动化操作,如自动发送和接收消息。itchat 是一个强大的 Python 微信个人号接口,它支持多种功能,包括但不限于聊天、发送文件、接收朋友圈消息等...
这个列表包含每个好友的基本信息,如`UserName`(微信ID)、`NickName`(昵称)、`Sex`(性别)和`Signature`(个性签名)等。我们可以遍历这个列表,对好友的性别进行计数,以分析男女好友的比例。 为了创建词云,我们需要...
返回的数据通常是JSON格式,包括昵称(nickname)、性别(sex,1为男性,2为女性)、头像URL(headimgurl)以及城市、省份等信息。 5. **处理JSON响应**: `json.asp`可能包含了解析JSON数据的函数。ASP中可以使用...
Java微信登录授权Demo详解 在Java开发中,微信登录授权是一项常见的功能,它允许用户通过微信账号快速登录到你的应用,提升用户体验。本篇将详细讲解如何利用Java实现微信登录授权,以及涉及到的关键技术和步骤。 ...
微信API返回的通常是JSON格式的数据,可以使用Jackson、Gson等库将JSON字符串解析成Java对象,方便后续操作。对于获取到的用户信息,可以存储在数据库中,供后续业务使用。 8. **安全注意事项** - 保护好App...
在本文中,我们将探讨如何利用Python编程语言实现在微信群中自动刷屏的功能。这个方法主要依赖于一个名为itchat的开源Python项目,该项目封装了微信的API接口,允许我们进行消息收发、好友数据处理等多种操作。 ...
微信订餐系统eims_wxdc v2.0 build20140717 更新说明: 1、去掉了礼品模块 2、简化了商家管理 3、商家与菜单添加了排序 4、订单添加了回收站 5、优化了获取JSON数据 6、添加了Refresh_token增加授权有效期 7...
微信小程序个人简历制作,传统的简历以一个文档的形式存在,现如今可以借助微信小程序平台制作个性化的简历。<!--index.wxml--> !hasUserInfo && canIUse}}" open-type="getUserInfo" bindgetuserinfo=...
4. **CSS样式**:通过类名如 `class='talks-layer'` 来设置样式,如隐藏或显示评论区域。`animation='{{talksAnimationData}}'` 可能是用来执行动画效果的,动画数据可能在对应的JS文件中定义。 5. **JS逻辑**:在...
##### 4. 主程序逻辑 ```python if __name__ == '__main__': itchat.auto_login() # 获取自己的UserName friends = itchat.get_friends(update=True)[0:] Name = {} Nic = [] User = [] for i in range(len...
微信授权登录是微信开放平台提供的一种便捷方式,允许第三方网站用户通过微信账号进行登录,从而实现用户身份的统一。在本示例中,我们将详细探讨如何利用PHP实现微信授权登录并获取用户信息,最终将这些信息存储到...
微信小程序获取用户头像和昵称是小程序开发中的常见需求,它主要涉及到微信小程序的前端页面与后端API的交互。具体的知识点包括: 1. 微信小程序基础框架介绍 首先,了解微信小程序的基础框架是非常重要的。微信小...
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 ...