您的位置:首页 > Web前端

java乱码 ferdora下解决问题心得 jdbc

2011-03-13 00:06 316 查看
前段时间学院java课程老师要求做一个相关demo,我自己用的是jdbc写了一个很小的程序,不过在这个环境下出现了中文字符乱码的问题。

当时用jdbc连接mysql,在完成连接数据库后发现取回的string 只要是中文的都是乱码。在网上搜索了一圈也没有能够解决问题。

大部分的人都是转载的解决乱码的问题

后来做了四个小时才最终解决这个问题, 、

1. 首先 jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=UTF-8

,这个在mysql的4.0版本以后基本就失效了。

2.需要在mysql的conf里面设置default-character-set=utf8,
从client端发送到mysql server端的过程:

  1.mysql命令行下发送update语句,使用locale的编码对语句进行编码。

2.mysql server接收到语句后,根据character_name_client的编码对语句进行解码。然后进行查询

3.把查询到结果用character_name_results进行编码,发送回client端

4.client端接到server端的语句后,用local的编码进行解码,输出到标准输出上。

对照上面的过程,一步一步来看,在发送语句的时候,对比locale的编码和character_name_client的编码是否一致,locale为
utf-8,character_name_client的编码为gbk,因为这两种编码不一样,造成在第2步的时候,乱码就产生了,编码和解码所用的字符集不一样。

在对数据库进行操作前,进行set
character_name_client=utf8的设置,顺便带一句,有时候我们在命令行select查询的时候,返回的结果中包含有中文的话,如
果出现了乱码,在character_name_client和locale的字符集相同的情况下,很有可能是第4步出现了乱
码,character_name_results的编码和locale的编码不同所造成,原理同上。我解决方法是在每次数据库连接时候都先进行
设置字符集的操作, set names utf8 然后 character_name_results = utf8
数据库的格式也是utf8 这样返回的中文就不是乱码了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: