解决JDBC与Mysql中文乱码现象
在用JDBC连接数据库进行打印输出的操作的时候,出现了中文乱码的问题。此时Mysql和网页状况如下:
Mysql乱成一窝粥。
网页的情况也是不容乐观……
经过资料查找,弄明白了是因为编码格式的问题。按照网络上的方法,将Mysql的编码格式和JDBC的部分代码修改成:
Mysql在命令行用set Variable_name=utf8;(如set character_set_client=utf8;),或者在Mysql的my.ini文件里面,将[client]和[mysql]下的default-character-set=后面改成utf8,然后在[mysqld]下面加一句character-set-server=utf8。
JDBC中则是在连接的Mysql的url后面加上useUnicode=true&characterEncoding=utf-8。
按照网上的攻略,完成这两步操作就大功告成了。
结果在我这里还是不行,依然乱码。
于是开始疯狂尝试……在3、4个小时的努力下,终于找出了解决方案。
将Mysql和JDBC再次修改如下:
Mysql修改character_set_client和character_set_results为gbk。
JDBC在方法开头加一句response.setCharacterEncoding("gbk");
看了一圈文章,觉得csdn的一位大佬说得很好:
"mysql控制台输入的数据默认编码是gbk,然而mysql服务器按照utf-8来解析保存数据.所以保存进去的数据必然出现乱码。
读取数据库的数据,mysql按照utf-8编码传输到控制台,然而控制台默认按照gbk来解析,所以显示的数据必然出现乱码。"
也就是说要想正常插入中文,正常读取数据输出为中文,就必须修改character_set_client和character_set_results为gbk格式。
8个 character_set 变量说明:
一、character_set_client
主要用来设置客户端使用的字符集。
二、character_set_connection
主要用来设置连接数据库时的字符集,如果程序中没有指明连接数据库使用的字符集类型则按照这个字符集设置。
三、character_set_database
主要用来设置默认创建数据库的编码格式,如果在创建数据库时没有设置编码格式,就按照这个格式设置。
四、character_set_filesystem
文件系统的编码格式,把操作系统上的文件名转化成此字符集,即把 character_set_client转换character_set_filesystem, 默认binary是不做任何转换的。
五、character_set_results
数据库给客户端返回时使用的编码格式,如果没有指明,使用服务器默认的编码格式。
六、character_set_server
服务器安装时指定的默认编码格式,这个变量建议由系统自己管理,不要人为定义。
七、character_set_system
数据库系统使用的编码格式,这个值一直是utf8,不需要设置,它是为存储系统元数据的编码格式。
八、character_sets_dir
这个变量是字符集安装的目录。
JDBC部分的修改,是自己尝试出来的,具体原理不是很确定,怕有误导就不过多阐述了。
Mysql和页面成功运行如下:
舒服了,今天也是有所收获的一天。