在通过jdbc的driver manager驱动mysql并插入数据时,我们似乎常遇到编码问题,尤其是中文gbk或者gb2312。今天终于找到了解决方案,可能大家的问题还更加复杂。
首先需要保证如下变量的字符集编码都是gb2312,也就是和你程序使用的string字符编码统一。
/**
* 创建数据库,由于网页使用了GB2312编码,所以需要先把数据库如下字符集编码更改为GB2312
*
* character_set_client:客户端的字符集
* character_set_results:结果字符集
* character_set_connection:连接字符集
* set character_set_XX = GB2312
*/
可以在mysql命令行输入 set character_set_XX = GB2312来修改。
接着,在命令行输入 \s 来检查变量是否已经改变,此时你会发现db还是之前默认的编码,那么程序中create database的时候就要设置default character set GB2312。
现在看似已经把三个变量都改成了GB2312的编码,但是存储中文数据还是显示乱码。而且在命令行输入 show procedure status 显示的character_set_client还是之前默认的编码格式(提醒:不用像网上说的那样修改my.ini文件,说不定改了还影响mysql的启动,不信你试试)。其实就是连接少了一句,这也是关键哦!!!
加载驱动之后,
String url = "jdbc:mysql://localhost:3306/?useUnicode=true&characterEncoding=gb2312" ;
在看存储过程的状态,这里就把character_set_client真正改变了!麻麻终于不用担心我的mysql有中文乱码了~~