再谈 My sql UTF8

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;





你可能感兴趣的:(再谈 My sql UTF8)