在检查了JSP页面、servlet、action以及web服务器之后,发现所有的配置均不会造成乱码的可能了。于是去找数据库的问题,本篇文章只针对mysql。
其实很简单,首先确认
1、数据库的字符类型
2、确认表的字符类型
3、使用以下语句查看数据库字符类型:
SHOW VARIABLES LIKE 'character%'; SHOW VARIABLES LIKE 'collation_database%';
以所需字符集为UTF8为例,在确认前两点后,这两条语句应该能查出不是UTF8的配置。
印象当中是character_set_server 和collation_database不是UTF8。于是查出了
一种解决办法,如下语句: mysql> SET character_set_client = utf8 ; mysql> SET character_set_connection = utf8 ; mysql> SET character_set_database = utf8 ; mysql> SET character_set_results = utf8 ; mysql> SET character_set_server = utf8 ; mysql> SET collation_connection = utf8 ; mysql> SET collation_database=utf8 ; mysql> SET collation_server=utf8 ;
虽然设置成功了,但是仍然乱码,而且数据库重新启动后编码格式又变为set以前的字符集。所以用set语句行不通。
最后想到了刚学mysql时的办法,修改配置文件。
windows系统下:修改my.ini
[mysql]下加入:
default-character-set=utf8
[mysqld]下加入
default-character-set=utf8
linux系统下:
[client]下加入:
default-character-set=utf8(此处之所以和windows下不同,我认为是不同系统下mysql版本问题,不对的话大家指正啊!)
[mysqld]下加入
default-character-set=utf8
这样的话数据库重新启动,字符集也不再变动了,乱码问题解决。比较麻烦的办法也有,就是在使用启动命令
之后直接加上 default-character-set=utf8,这样也可以,只是每次启动时麻烦一点而已。