服务器 频道

MySQL与JDBC的编码解决笔记

  【IT168 服务器学院】环境:
  OS:debian 3.1 sarge
  MySQL:4.0.24
  JDBC:3.1.8
  Tomcat:5.0

  1、创建数据库
  根据我的习惯,我一般使用SQL文件来创建数据库,并且进行数据库初始化以及添加测试数据。
  创建数据库的文件编码为UTF-8.

  2、MySQL设置
  根据很多大虾的指南,我在/etc/mysql/my.cnf中分别加了如下内容:
  [client]
  default-character-set=gbk

  [mysqld]
  default-character-set=gbk

  使用mysql客户端登录,查看:
  mysql> show variables like ''character_set'';
  +---------------+-------+
  | Variable_name | Value |
  +---------------+-------+
  | character_set | gbk   |
  +---------------+-------+
  说明数据库的默认编码已经成功的改为了gbk.

  问题:
  当我使用php连接mysql的时候,使用utf-8的编码可以正常显示中文。但是当我在JDBC中使用utf-8不可以。
  包括设置response.setCharacterEncoding("UTF-8");同样没有效果。

  实验:
  1、通过终端将终端编码查询。显示中文为乱码。将终端编码转为utf-8,查询正常显示中文。
  2、我使用jdbc添加一条中文信息到数据库中,通过php查看,显示为乱码,当我将编码调为gbk时正常。
  这时间我想,我通过文件添加到数据库中的数据可能并非GBK编码,而是使用了UTF-8.

  解决:
  在URL参数上加上:useUnicode=true&characterEncoding=utf8,
  查询正常显示。

  结论:虽然数据库默认编码为gbk,但是数据存储却使用了utf-8格式,这时如果不指明数据使用的为utf8格式,则JDBC会通过查看character_set而自动进行一个从GBK->UTF-8的编码转换,这个转换是多余的。因而出错。
  至于为什么设置默认编码为gbk而存到数据库中依然为utf-8,我依然没有弄明白。

   

0
相关文章