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