Java项目中使用MySQL作为数据库进行连接时可能出现乱码,其很使烦恼!
<!--这里使用hibernate做数据库连接,这里只是探讨乱码问题,至于使用jdbc,配置文件等都有雷同>
这里可以认为数据库在本地和远程服务段并没多大的差别,唯一不方便的是不能手动修改服务端的数据库默认配置信息。有些服务器提供数据库服务,但是他并不排除其默认编码未做修改(latin1)。
现在将项目分为两个部分,MySQL数据库和Java代码。首先从java代码入手分析暂时不考虑web项目中jsp传值问题(后续将做总结),实现简单的数据库连接和查询。在编写java代码时确保编辑器使用的utf-8(使得页面提交的数据不会因为不统一的编码问题而提交乱码),这里通常使用中文和英文同时做测试,可以排除一些程序上逻辑的错误导致输出不正确的信息。
package test;
import org.hibernate.Session;
import pojo.Tdo;
import sessionFactory.HibernateSessionFactory;
public class DaoImpl {
public static void main(String[] args) {
Session session=HibernateSessionFactory.getSession();
session.clear();
Tdo tdo=(Tdo)session.createQuery(" from Tdo where name='"+正+"'").uniqueResult();
String gname=tdo.getName();
System.out.println(tdo.getName());
session.close();
}
}
然后测试,如果还是有问题。那么既然这么简单的方式就出问题说明数据源出问题了。
数据库MySQL,查看数据库默认编码在安装文件夹下my.ini
[client]
port=3306
[mysql]
default-character-set=utf8
# SERVER SECTION
和建表时选项中的编码格式(这里注意navicat等可视化数据库操作工具并不能真正的修改一些默认配置信息,必须在MySQL中修改)修改默认配置my.ini时需要重启MySQL。这里可以使用很简单的测试数据库编码代码
show variables like 'character%'
中的character_set_server,就是数据库中的默认编码,如果不统一可以在MySQL配置文件中修改,当然也可以在hibernate配置文件中修改
后一种灵活性比较高,如你无法操作数据库配置文件。