-----------------+
| user | CREATE TABLE `user` (
`UserID` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(20) COLLATE utf8_bin NOT NULL,
`userpassword` varchar(20) COLLATE utf8_bin NOT NULL,
`address` varchar(100) COLLATE utf8_bin DEFAULT NULL,
PRIMARY KEY (`UserID`),
UNIQUE KEY `UserName` (`username`),
UNIQUE KEY `username_2` (`username`)
) ENGINE=InnoDB AUTO_INCREMENT=72 DEFAULT CHARSET=utf8 COLLATE=utf8_bin |
+-------+-----------------------------------------------------------------------
-------------------------------------------------------------------------------
-----------------+
1 row in set (0.00 sec)
之后检查,每一列后面的编码是不是utf8,同时看表格后边的charset=多少 ,collate后面指定的编码方式,指的是数据库搜索的时候使用的匹配编码规则。
做到3和4中的情况,基本可以确定数据库和表格中的编码是没有任何的问题了。其余的问题只能够处在jsp中以及jsp和数据库的连接之中。
5.检查jsp中的代码是否全部是UTF-8的方式。
第一步:
对于jsp页面本身:
<%@page contentType="text/html ; charset=UTF-8 " pageEncoding="UTF-8" %>
第二步:
对于html页面本身:
第三步:
jsp:request.setCharacterEncoding("UTF-8");
jsp:response.setCharacterEncoding("UTF-8");
做到如上,基本上jsp中的代码完全没有问题了,保证都是UTF-8.
6.检查连接过程是否出现问题,楼主就是这里出了问题,结果找了很久。。。
在jsp中链接数据库的时候:
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/mydata?user=root&password=password1&useUnicode=true&characterEncoding=UTF-8");
注:这里mydata是数据库名称
localhost是本机host
root是连接数据库的用户名
password1是连接数据库的密码
useUnicode=true&characterEncoding=UTF-8指定了连接使用的编码方式
楼主曾经也想过在连接没用 useUnicode=true&characterEncoding=UTF-8 的凡事,在连接之后 用set names utf8的方式,但是没有成功。
以上,问题完全解决了,以防万一,建议大家讲IDE的编码设置为UTF-8,什么eclipse myeclipse netbeanse 你懂的。。。。
7.在servl中的设置:
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
MYSQL数据库已经其中的表和列如果一开始编码不是UTF-8,要设置成为UTF-8可以采用如下的方式。
注意:如果表中存在数据,有可能发生错误。
1.将数据库的编码改为UTF-8
Alter DATABASE 'test' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin
以上命令就是将test数据库的编码设为utf8.
2.将表的编码改为UTF-8
Alter TABLE 'category' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin
以上命令就是将一个表category的编码改为utf8.
3.将表中字段(每一列)的编码改为UTF-8
Alter TABLE 'test' CHANGE 'dd' 'dd' VARCHAR( 45 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL
以上命令就是将test表中 dd的字段编码改为utf8.
4.设置其他(默认)编码:
在mySQL安装目录,打开mysql.ini,将所有character后边的编码改成utf8,这样就改变的创建新数据库和表的时候的默认编码,MYSQL重启不失效。