下面的方法尝试过,但是没有成功,还是用SQL-Front这个软件,登录进去找到要用的数据库或者表右键属性,把那个defaultcharacter,就是原值为latin1的那个改成utf8即可~

用 jdbc 插入、读取Mysql中文乱码。 


首先,mysql 数据库中的东西都是二进制存放的,支持任何数据,当然包括中文。你到命令行下 
insert into testtable values ( '中文' ); 
select * from testtable; 
全都显示正常。 
但是,虽然存取中文没问题,但排序、匹配的时候有问题。所以如果你的数据库里有中文的话,记得在配置文件中,如 c:winntmy.ini 中的 [mysqld] 里添加一行: 
default-character-set=gbk 
然后重启 mysql server 。 注意 gbk 要小写,不然 mysqld 启动不了。 


其次,数据库没问题,下面看看 java 程序。在程序里加一句调试语句: 
out.println("中文"); 
也显示正常,说明整个 java 环境没问题。 


所以,当然是联系 java 和 mysql 的部分,mysql jdbc driver 出问题了。 
分析一下,java 内部使用 unicode ,而 mysql 缺省使用 iso-8xxx(忘了),所以 jdbc driver 把查询字符串传给 mysql server 时,会做 unicode->iso-8xxx 的转换,从 mysql server 接受结果时,会做 iso-8xxx->unicode 的转换。(在屏幕上显示结果时会 unicode->GBK,不过不关这里的事。) 
这就有问题了,我在命令行下插入数据库的中文字符串是 GBK (这是简体中文 windows 的默认),所以 jdbc driver 接受查询结果时,应该做 GBK->unicode 的转换才对。 
验证一下,对从数据库中读出的中文字串 s , 
new String( s.getByte("iso-8xxx"), "gbk" ) 
将 s 先做一个 unicode->iso-8xxx 转换成它存放在数据库中的原始模样。我们知道它是 gbk ,所以手工来 gbk->unicode ,这样 java 程序就显式正常了。 
类似,写入数据库的时候,我们期待 jdbc driver 会把 unicode->gbk ,结果却是 unicode->iso-8xxx ,当然是乱码了。