使用 java 在 linux 环境下连接 mysql 乱码问题

java 方面

1. 在 url 连接参数后面添加数据

1
jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8
该参数的作用是:指定字符的编码、解码格式。

例如:mysql 数据库用的是 gbk 编码,而项目数据库用的是 utf-8 编码。
这时候如果添加了 useUnicode=true&characterEncoding=UTF-8 ,
那么作用有如下两个方面:

  1. 存数据时:
    数据库在存放项目数据的时候会先用 UTF-8 格式将数据解码成字节码,
    然后再将解码后的字节码重新使用 GBK 编码存放到数据库中。
  2. 取数据时:
    在从数据库中取数据的时候,数据库会先将数据库中的数据按 GBK 格式解码成字节码,
    然后再将解码后的字节码重新按 UTF-8 格式编码数据,最后再将数据返回给客户端。

2.request response 设置的编码设置成 utf-8 形式

1
2
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");

mysql 方面:

创建数据库时候要指定 UTF-8 编码

1
create database (数据库名字) default character set='utf8';   注意 utf8 中间没有 -

设置完成以上两步 程序插入中文和读取中文都没有问题了,
但是: 接下来的问题是 有些同学插入的数据是中文 但是 select 语句一执行 就出先现???
别着急 那是因为 mysql 终端数据显示编码不一致,在 mysql -uroot -p 进入 mysql 执行

1
set names "utf8";

至此乱码问题解决

windows 下把以上 utf-8 改成 gbk 即可