`
dcj3sjt126com
  • 浏览: 1877621 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

微信nickname乱码及mysql编码格式设置(utf8mb4)

 
阅读更多

将数据库的编码设置为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

分享到:
评论

相关推荐

    微信小程序base64编码,解决传递中文乱码问题

    import {Base64} from '../../utils/base...nickName = Base64.encode(nickName); //加密 console.log('nickNameEncoded'+nickName); // nickName = Base64.decode(nickName);//解密 // console.log('解密'+nickName);

    Incorrect string value: ‘\xF0\x9F\x8C\xB7’ for column ‘nickname’修改mysql某列的编码格式

    Emoji表情或者某些特殊字符是4个字节,而Mysql的utf8编码最多3个字节,所以数据插不进去。 Cause: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x8C\xB7' for column 'nickname' at row 1 解决方案 ...

    php获取微信code.openid.名字和头像

    现在,你已经成功地获取到了微信用户的code、openid、名字(nickname)和头像URL(headimgurl)。这些信息可以存储在你的数据库中,以便后续使用。 在实际项目中,需要注意以下几点: - **安全处理**:确保你的...

    手把手教你如何用python实现微信自动发消息.doc

    Python 语言结合 itchat 库为我们提供了一种方便的方式来实现微信的自动化操作,如自动发送和接收消息。itchat 是一个强大的 Python 微信个人号接口,它支持多种功能,包括但不限于聊天、发送文件、接收朋友圈消息等...

    java获取微信用户信息源码

    4. `UserInfoServlet`:接收微信服务器回调的code,调用`OAuth2Client`获取用户信息,并将信息传递给JSP页面显示。 5. `jsp`文件:如`userinfo.jsp`,用于展示用户信息。 在实际使用中,你需要将`OAuth2Client`中的...

    只需要两行代码 实现PHP微信登录及获得用户信息

    由于我们之前设置了`scope`为`snsapi_base`,只能获取到openid对应的微信用户基本信息(不包括昵称、头像等),如果需要这些信息,需在第一步设置`scope`为`snsapi_userinfo`。现在展示如何获取基本的用户信息: ``...

    python实现微信好友词云

    这个列表包含每个好友的基本信息,如`UserName`(微信ID)、`NickName`(昵称)、`Sex`(性别)和`Signature`(个性签名)等。我们可以遍历这个列表,对好友的性别进行计数,以分析男女好友的比例。 为了创建词云,我们需要...

    asp版实现微信登录授权并获取用户昵称、性别、头像、来自等信息

    返回的数据通常是JSON格式,包括昵称(nickname)、性别(sex,1为男性,2为女性)、头像URL(headimgurl)以及城市、省份等信息。 5. **处理JSON响应**: `json.asp`可能包含了解析JSON数据的函数。ASP中可以使用...

    java微信登录授权demo

    Java微信登录授权Demo详解 在Java开发中,微信登录授权是一项常见的功能,它允许用户通过微信账号快速登录到你的应用,提升用户体验。本篇将详细讲解如何利用Java实现微信登录授权,以及涉及到的关键技术和步骤。 ...

    java对微信的OAuth2.0网页授权进行访问授权

    微信API返回的通常是JSON格式的数据,可以使用Jackson、Gson等库将JSON字符串解析成Java对象,方便后续操作。对于获取到的用户信息,可以存储在数据库中,供后续业务使用。 8. **安全注意事项** - 保护好App...

    利用python实现在微信群刷屏的方法

    在本文中,我们将探讨如何利用Python编程语言实现在微信群中自动刷屏的功能。这个方法主要依赖于一个名为itchat的开源Python项目,该项目封装了微信的API接口,允许我们进行消息收发、好友数据处理等多种操作。 ...

    eims微信订餐系统 v2.0.zip

    微信订餐系统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源码)

    微信授权登录是微信开放平台提供的一种便捷方式,允许第三方网站用户通过微信账号进行登录,从而实现用户身份的统一。在本示例中,我们将详细探讨如何利用PHP实现微信授权登录并获取用户信息,最终将这些信息存储到...

    微信小程序如何获取用户头像和昵称

    微信小程序获取用户头像和昵称是小程序开发中的常见需求,它主要涉及到微信小程序的前端页面与后端API的交互。具体的知识点包括: 1. 微信小程序基础框架介绍 首先,了解微信小程序的基础框架是非常重要的。微信小...

    asp微信订餐系统eims_wxdcv2.0

    inc/conn.asp 的安装路径 此程序需要绑定微信服务号[微信浏览器才能打开],因为测试需要,固定了绑定账号 正式使用时: 请去掉 inc/conn.asp 的: nickname="eims" openid="eims" 同时打开 api/0.asp 配置微信服务号...

    微信 网页授权获取用户基本信息(asp.net C#)

    微信授权获取用户基本信息 //nickname = outputObj1["nickname"].ToString(); //昵称 //sex = outputObj1["sex"].ToString(); //性别 headimgurl = outputObj1["headimgurl"].ToString(); //头像url //province ...

Global site tag (gtag.js) - Google Analytics