mysql之坑–UTF8字符集

Mysql的UTF8字符集不是标准的UTF8字符集!

行业定义中的UTF8是4个字节组成的字符集,所有的前后端开发语言也都是按这个标准执行的,但是Mysql却特立独行,它支持的utf8字符集是3个字节的。OMG!坑人坑的悄无声息。但Mysql也不是知错不改,它添加了一个utf8mb4字符集,用来支持4字节的utf8,用来和行业并轨。所以在mysql中定义utf8时,一定要选择utf8mb4!一定要选择utf8mb4!一定要选择utf8mb4!

下面讲如何设置,让整个流程都是正常运行的。

1.修改mysql数据库配置

打开mysql配置文件my.cnf(windows为my.ini),修改对应配置项,若没有该配置项则添加

保存后重启数据库。

2.JDBC连接

若jdbc的url中有参数characterEncoding=utf8,则要把该参数去掉。原因有二:

  • 因为若设置成utf8,则mysql认为会话中使用的就是utf8字符集,而非utf8mb4。
  • jdbc采用Java中的Charset来构造jdbc请求中的字符集,而Java中并没有utf8mb4这个字符集,所以也不能把characterEncoding设置成utf8mb4,否则报错。

3.Mysql客户端程序

按上两步设置后,java端已能正常存取4自己的utf8数据。这里再讲下客户端程序。

笔者使用的是mysql workbench客户端软件,发现workbench中依然无法存取4字节数据。用show variables like ‘%char%’; 命令查看后,发现character_set_client、character_set_connection、character_set_results依旧是utf8,也找不到统一设置的地方。

无奈只好通过命令把参数都设置一遍

set character_set_client=’utf8mb4′;
set character_set_connection=’utf8mb4′;
set character_set_results=’utf8mb4′;

最后终于可以正常存取4字节utf8数据。

 


发表评论

电子邮件地址不会被公开。 必填项已用*标注