位置: 编程技术 - 正文

MySQL插入emoji表情失败问题的解决方法(mysql存emoji表情)

编辑:rootadmin

推荐整理分享MySQL插入emoji表情失败问题的解决方法(mysql存emoji表情),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:mysql存emoji,mysql存emoji表情,mysql存emoji,mysql支持emoji表情,mysql存emoji表情,mysql存emoji表情,mysql emoji,mysql存emoji表情,内容如对您有帮助,希望把文章链接给更多的朋友!

前言

之前一直认为UTF-8是万能的字符集问题解决方案,直到最近遇到这个问题。最近在做新浪微博的爬虫, 在存库的时候发现只要保持emoji表情,就回抛出以下异常:

众所周知UTF-8是3个字节, 其中已经包括我们日常能见过的绝大多数字体. 但3个字节远远不够容纳所有的文字, 所以便有了utf8mb4, utf8mb4是utf8的超集, 占4个字节, 向下兼容utf8. 我们日常用的emoji表情就是4个字节了.

所以在此我们像utf8的数据表插入数据就会报出Incorrect string value这个错误.

Google一下很容易就找到了解决方案, 具体解决办法是如下:

一、修改数据表的字符集为utf8mb4

这点很简单, 修改语句网上找一大堆, 不过建议重新建表, 使用 mysqldump -uusername -ppassword database_name table_name > table.sql 备份相应数据表, 并修改其中的建表语句的字符集为 utf8mb4 即可, 然后 mysql -uusername -ppassword database_name < table.sql 重新导入sql即可完成修改字符集操作.

二、MySQL数据库版本要5.5.3及以上

网络上所有的文章都说明要MySQL 5.5.3以上的版本才支持utf8mb4, 不过我使用的数据库版本为5.5., 最终仍能解决问题, 所以同学们不要急着找运维哥哥升级数据库先, 先试试能不能自己解决问题.

三、修改数据库配置文件/etc/my.cnf并重启mysql服务

主要是修改数据库的默认字符集, 以及连接, 查询的字符集, [Mysql支持emoji 表情符号 升级编码为UTF8MB4][1] 这篇文章有详细的设置方法, [深入Mysql字符集设置][2] 这篇文章有其中设置的各个字符集的作用, 大家可以科普下.

四、升级MySQL Connector到5.1.及以上

MySQL插入emoji表情失败问题的解决方法(mysql存emoji表情)

以上所有的操作, 最关键的是步骤3, 修改数据库的配置文件, 其中大概修改了

这些配置指定了数据从客户端到服务端所经过的一条条管道使用的字符集, 其中每一个管道出现问题都可能会导致插入失败或者乱码.

但很多时候, 线上的数据库是不能随便修改数据库文件的, 所以我们的运维同学很果断的回绝了我修改数据库配置文件的请求(T_T)

所以就只能用代码解决了, 一开始是准备从JDBC连接时候就指定使用的字符集处下手.

主要把UTF-8修改为utf8mb4对于的Java Style Charset字符串应该就能解决问题吧&#;

不过很遗憾的是, Java JDBC并不存在utf8mb4对于的字符集. 使用UTF-8的时候可以兼容urf8mb4并自动转换字符集.

For example, to use 4-byte UTF-8 character sets with Connector/J, configure the MySQL server with character_set_server=utf8mb4, and leave characterEncoding out of the Connector/J connection string. Connector/J will then autodetect the UTF-8 setting. ? [MySQL:Using Character Sets and Unicode][3]

后来科普了一下, 在每一次查询请求的时候, 可以显式的指定使用的字符集, 使用 set names utf8mb4 可以指定本次链接的字符集为utf8mb4, 但这个设置在每次连接被释放后都会失效.

目前的解决办法是, 在需要插入utf8mb4的时候, 显示地调用执行set names utf8mb4, 如:

需要注意的是, 我们在使用一下ORM框架的时候, 因为性能优化原因, 框架会延迟提交, 除非事务结束或者用户主动调用强制提交, 负责执行的set names utf8mb4仍然不会生效.

在这里我使用的是myBatis, 以MessageDao为例

至此, 问题便解决了..

哎, 如果世事能那么顺利就好了, 在项目中, mybatis是实例是交由Spring去管理的, 也就是说我拿不到sqlSession, 也就是强制提交不了. 并且因为Spring事务框架的限制, 他并不允许用户显式调用强制提交. 目前还在纠结这个问题.

有两个解决思路:

使用AOP, 在可能插入4字节UTF8字符的时候, 前置方法执行set names utf8mb4, 但该方案还不能确定AOP的方法会被Spring进行事务管理么, 并且在前置方法中,拿到的链接是否和接下来拿到的连接对象是同一个session. 研究Spring JDBC的创建方法, 写一个hook在每次创建新的数据库连接的时候, 都执行一次set names utf8mb4, 这样就保证每一次拿到的链接都是设置过字符集的.

总结

标签: mysql存emoji表情

本文链接地址:https://www.jiuchutong.com/biancheng/349664.html 转载请保留说明!

上一篇:CentOS7 64位安装mysql图文教程

下一篇:Linux/Mac MySQL忘记密码怎么办

  • 小规模拍卖公司差额征税
  • 计提增值税及附加税费怎么算
  • 来料加工出口免税不退税
  • 主营业务成本包括职工薪酬吗
  • 免交附加税政策
  • 购销合同签定有法律效力吗
  • 合并报表无形资产摊销时间
  • 合同负债与预计负责区别
  • 小规模纳税人收入账务处理
  • 企业所得税可以不交吗
  • 转让土地使用权会计分录怎么做
  • 复利现值系数完整版
  • 经营租赁的资产应计入哪里
  • 办公设备维修费会计分录
  • 收到车辆保险返还会计分录
  • 固定资产转为投资性房地产折旧怎么算
  • 应收账款的借方表示增加还是减少
  • 商用住房出租需要交什么税?
  • 子公司员工向母公司申请党员
  • 个人抬头发票能开专票吗
  • 土地租赁费含有多少税率
  • 小微企业超过300万企业所得税
  • 企业清算企业所得税税率
  • 出口佣金可以在企业所得税前扣除吗
  • 开办费要如何扣款
  • 出口退税换汇率多少是正常
  • 城镇退役士兵安置条例
  • 自然人税收系统怎么添加人员
  • 投资性房地产的后续计量从成本模式转为公允价值模式的
  • 工商企业年报网上申报时间
  • 航空公司收取什么费
  • 新的磁贴
  • java开发主流框架
  • 酒店布草洗涤赔偿怎样折旧
  • h5适配iphonex
  • PHP:pcntl_wexitstatus()的用法_PCNTL函数
  • 固定资产提足折旧后报废怎么处理
  • 一个简单的html文档一般且必须包含哪些标签
  • 前端工程化的理解简书
  • 从银行提取现金分录
  • 在建工程转无形资产 会计准则
  • 在vue中如果computed属性是一个异步操作怎么办?
  • 俄勒冈zip
  • 基于深度学习的图像超分辨率——综述
  • php多选
  • 小规模纳税人增值税税率
  • php返回json数据交给js读出来是数字,不是字符串
  • 小企业销售折让与销售退回发生时如何处理
  • mysql怎么修改
  • 金融工具占比低
  • 定期定额征收和核定征收的哪种税率高
  • 航天金税服务费280元每年都交吗
  • 会计的视频教程
  • 老板买了手机,算入什么费用
  • 违约方缴纳的履约金
  • 营改增后的增值税税目税率表
  • 抵扣认证的发票怎么冲红
  • 新手公司内帐怎么做
  • 股权部分转让如何计算
  • mysql忘记了初始密码
  • sqlserver数据库恢复挂起状态
  • win7 64位系统插入磁盘提示“将磁盘插入驱动器”的解决方法
  • win8系统怎样安装
  • linux rootkit查杀
  • win7与xp文件共享
  • linux搭建l2tp服务器
  • xpcpu占用100
  • win7旗舰版u盘在电脑上读不出来
  • win7格式化怎么操作?
  • js的事件绑定
  • cocos2dx 2.2.2
  • 批处理执行bat文件
  • 编程中的python
  • js中的原型和原型链
  • context和getApplicationContext()介绍
  • 湖北生育登记网上服务大厅官网查询
  • 江苏省内车辆迁入标准
  • 什么是税务证书密码
  • 残疾人个人所得税减免政策2023
  • 代理记账资质办理在哪个网站提交申请
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设