数据插入数据库出现中文乱码问题
一、开发环境
Java语言、开发平台eclipse、数据库MySQL
二、问题描述
在Java开发时,写了两个页面:登录页面、注册页面。通过注册可以把数据插入数据库中,通过登录可以查询数据库中的数据,成功则进入首页,失败则不能进入。登录、注册都是通过form表单,采用Post方式提交的。
1-1 但是在注册页面输入中文名注册时,发现数据库中显示的姓名是乱码;
2-1 或者注册成功,数据库中不是乱码,但是登录的时候输入中文名却登录不成功。
三、问题显示
1-1、进入注册页面,输入中文名“张三”,点击“提交”
1-2、查看数据库,发现提交的“张三”显示乱码
2-1、登录用户名“张三峰”,账号密码正确,但登录不了
四、解决办法
1 数据库中中文名出现乱码,首先考虑是数据库这边的问题,还是在提交到数据库的时候就是乱码。
1-1 在执行sql语句的那一行打个断点(双击行号左边打断点)
1-2 以Debug方式重启服务器,以识别断点
1-3 当执行断点所在的方法时拦截代码,再次注册用户提交
1-4 拦截代码,进入Debug模式
1-5 查看各插入数据的值,可以发现在进数据库之前,用户名name就是乱码,所以问题出现在在服务器这边
注意:如果这里用户名name不是乱码,但数据库里是乱码,则可能是创建数据库时,数据库的编码没有设置成功,不是UTF-8,则重新设置一下数据库的编码即可。
1-6 关掉服务器,移除断点,返回Java视图
1-7 往前找问题,一般在Java文件的传输过程中不会出现乱码,所以可能是从前端去取值的时候出现了乱码
经检查,注册时通过过form表单,采用Post方式提交的,而Post提交方式需要自己手动设置字符编码UTF-8。
// 设置字符编码:一定要设在第一行!
request.setCharacterEncoding("UTF-8");
注意:手动设置字符编码UTF-8一定要设置在第一行,取完值之后再设置就没有意义了!
1-8 重启服务器,注意检查控制台是否报错
1-9 刷新页面重新注册,查看数据库,中文显示正确
2-1 在登录中文名的时候,取值的前也要设置字符编码,否则也是乱码,登录不成功
2-2 重启服务器,中文名登录成功!