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

前段时间学院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   这样返回的中文就不是乱码了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值