再谈 My sql UTF8
博客专区 > idoz 的博客 > 博客详情
再谈 My sql UTF8
idoz 发表于2年前
再谈 My sql UTF8
  • 发表于 2年前
  • 阅读 46
  • 收藏 0
  • 点赞 0
  • 评论 0

华为云·免费上云实践>>>   

UTF-8可能是我们使用的最多的一种字符编码,一直以其支持的广泛的字符被人称道,我也经常在项目中使用它,至到遇到了:SQL state [HY000]; error code [1366]; Incorrect string value: '\xF0\x9F\x92\x8BRo...' for column

DB环境:mysql,

字符集编码: utf8

这是在jdbc中执行的时候出现的问题,如果将出错的sql语句在command中执行,不是会出错的,为什么呢?

在mysql 中规定utf8的字符的最大长度为3(maxLen=3), 但是一些unicode字符在转成utf8编码之后有4字节的

长度,所以就出错了。

例如: *号在转为utf8时为 f0 9f 8d 8e

String c = "*";
byte[] bytes = c.getBytes("utf8");
for (byte b : bytes){
 System.out.print(Integer.toHexString(0x00FF &b)+" ");
} // 输出 f0 9f 8d 8e

好在mysql 早为我们想好了这些,那如何办呢?

只需将出错的列的编码更改为utf8mb4就行了, what is mb4 means?  max byte ?

ALTER TABLE {yourTable} MODIFY {column} VARCHAR(45) 
CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;





共有 人打赏支持
粉丝 11
博文 82
码字总数 128513
×
idoz
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: