java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\xA7\xA7‘ for column

问题背景

今天在开发自己的小程序时候,在苹果手机上输入了一个表情,结果出现了错误,查看后台报错如下: java.sql.SQLException: Incorrect string value: '\xF0\x9F\xA7\xA7' for column 'content' at row 1

问题分析

出现这个错误,可以从他的异常信息看出是SQL异常了,然后在后面会有一个'\xF0\x9F\xA7\xA7' for column 'content' at row 1,说明是在content字段插入了一个4字节的emoji表情,出现错误了。

数据中包含的emoji表情字符,通常的情况下,Mysql数据编码格式为“utf-8”,对于我们汉字来说也是足够用的,但是mysql中的utf8占用的是3个字节,此时,三个字节对于emoji表情符号就是完全不够用的了;它需要的是4个字节,所以,此时的utf8会报错上文提到的Incorrect string value: '\xF0\x9F\xA7\xA7' for column 问题。

解决方案

这里提供两种解决方案

  1. 修改mysql的编码格式 utfmb4编码其实是utf8编码的超集,他是兼容utf8的,并且能够存储4个字节emoji表情字符了。

    首先,修改mysql的配置文件:usr/local/mysql/bin/my.ini,然后添加如下的内容:

    [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
     init_connect=‘SET NAMES utf8mb4’
    
    

    然后,重启数据库

    在linux中:service mysql restart

    在windows中:

            net stop mysql 
    
            net start mysql
    

    最后,修改数据编码格式更改为utf8mb4 执行sql: ALTER TABLE t_leave_word CONVERT TO CHARACTER SET utf8mb4

  2. 通过我们的代码来实现4字节的字符进行转换

    这里代码就不贴了,因为这种方案几乎没人用了,毕竟第一种方案是最简但方便的,为什么还要去撸代码实现转化呢?

    对于那些想要代码的,可以私信我,亦或者去找度娘吧,他那肯定有的!

对于阿里云购买的数据库怎么搞呢?

这里也不着急,进入阿里云官网后台,控制台中选择数据库实例管理页面,找到参数管理,将他的character_set_server修改为utf8mb4,提交参数,重启数据库即可。

这里就搞定了,欢迎大家留言交流,也欢迎大家关注我的工种昊《coder练习生》

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ybb_ymm

你的鼓励会是对我最大的支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值