google一下。。你可以找一大堆解决方案。。但是我觉得都没有从根本上解决问题。。是不是?
我觉得要想根本解决。。最主要的方法是统一编码方案。。说出来很简单。。原因也很简单。。但你真的做到了吗。。
首先不论你写的是jsp servlet html 等都必须显示标明contentType为UTF-8(强烈推荐是UTF-8..windows默认应该是GBK 什么2312的。。)。。
然后request也要设置同样的编码方案。。不解释。。原因。。就像说话。。如果你说中文。另一个人说英语。。还有一个说阿拉伯。。你行吗?
这样之后。。你的工作只解决了一半,。。mysql还要设置统一编码方案。。对吧。。在mysql配置文件my.cnf ,windows应该是my.ini,在client后面统一用UTF-8.加上
default-character-set=utf8(不要写出UTF-8,容易造成参数解析)。。然后服务器也要设置。。在mysqld下添加:character-set-server=utf8..之后在试下效果如何呢?
还是乱码对不对?
没错。。因为数据库。还是使用其他编码。。你进入mysql下。。输入status。显示四个编码。。是一样的吗。。不一样的话还是有问题。。
怎么办。。临时的话可以使用set nemes utf8 但没有用。。想要长期有效。。可以这样。。试试:alter database databasename character set utf8 。。这样再status下。。看看是不是一样的了?
好了。。事情算是完成了。。但你会发现你现在连中文都插入不进去。。提示什么非法字符。。这岂不是事情更糟了吗?
对。。事情发展成这样了。。原因是你建表的时候编码依然不是utf8,你可以试试:show create table tablename 。。发现了吗。。默认建表是什么呢?
所以要想完全解决问题。。只有重新建表。。很麻烦不是?备份吧。。方法还用多说吗?上面的日志写得很清楚了。。自己看看吧。。
注意:无论你改了什么配置。。都不会默认自动生效。。需要重启mysql 。。。。不会的话重启电脑。。。
还要注意的是好像windows下的虚拟dos不支持utf8.所以如果还是不能解决问题。。可能是你的系统问题。。装linux吧。。