数据库中文乱码及分析
数据库出现乱码主要是因为服务器端与客户端,或者是数据库本身编码不同造成的。
主要的情况如下:
一.mysql数据库的问题
测试:
使用mysql -u root -p登录数据库,输入
我这个是改完之后的,保证所有的都是utf8.
方法是:
Mac:
找到安装路径下的my.cnf文件,到/usr/local/mysql/support-files
目录下将mac上的mysql配置文件模板my-default.cnf
拷贝到/etc
下,并将文件名改成my.cnf
,之后用文本编辑器打开,添加一下内容。后面两个要放到文件最后,要不会启动不了mysql。之后保存,测试一下是否可以使用
[mysqld]
character-set-server=utf8 #注意这行不要写成 default-character-set=utf8
[client]
default-character-set=utf8
[mysql]
no-auto-rehash
windows:
找到my.ini文件位于C:\ProgramData\MySQL\MySQL Server 5.1目录下,如果找不到就在命令行MySQL 5.6 Command Line Client的快捷方式配置中(也就是右击找到属性),查看目标一栏,这个就是my.ini的地址
二.navicat的问题(其他数据库工具没用过,可能也有这个问题)
步骤与mysql相同,这是修改完之后的,如果不一样就是这个的问题了(折腾了一下午,就是这个问题)
解决:
在上面的步骤(也包括第一个)无误的基础上,重启mysql
Mac:
sudo /usr/local/mysql/support-files/mysql.server restart
windows:
net stop mysql;停止mysql
net start mysql;启动mysql
在navicat中创建新的连接,设定编码集为自动或者是utf8都可以,之后就可以了
————————————————————————————————————————————————————————————————————————————————————
之后的就是页面方向出现的问题了,如果确认多次页面接收没有问题,基本可以不用看
————————————————————————————————————————————————————————————————————————————————————
三.jsp—— >servlet的问题(也有可能是另一个接收数据的jsp页面)
测试
在接收端将接收到的数据使用system.out.print()输出
结果和操作:
1.如果产生乱码:在接收页面之前使用,下面两行代码
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");之后就可以照常使用set函数对变量进行赋值了。
2.如果没有产生乱码:该层次乱码可能性排除
二.Dao层的问题(也就是在java中写的数据库语句的部分)
测试
在dao层中将接收到的数据使用system.out.print()输出,也就是这个地方
结果和操作:
出现的可能性不大,我没有出现过(如果出现欢迎在评论区补充)
三.Connection的问题(没有遇见过,不过网上有的给出过关于这个的答案)
结果和操作:
在connection的url之后添加
?useUnicode=true&characterEncoding=utf-8
当然如果你连接数据库的方式和我一样,有useSSL=false的话,你还要在后面再加一个&,如图