码迷,mamicode.com
首页 > 数据库 > 详细

再谈 My sql UTF8

时间:2015-08-26 15:55:40      阅读:296      评论: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;





再谈 My sql UTF8

标签:

原文地址:http://my.oschina.net/doz/blog/497317

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!