MYSQL数据库乱码解决方案

原创 2015年11月20日 21:03:26

数据库层面的乱码

数据库的默认编码方式为latina
而我们集成开发时通过JDBC或者Hibernate写入数据时从前端获取的通常都是utf8,自然会出现乱码
可以通过show variables like ‘char%’查看数据库的编码方式
而在命令行中set names utf8可解决乱码问题,但此次设置只对本次有效,如果开发过程中忘了在存之前切换到数据库进行设置依然会乱码
命令character-set-client 编码设置数据库的客户端发送编码方式
character-set-connection编码设置数据库转化器的编码方式
character-set-results编码设置客户端接受的(返回结果)
但最好的方式是写入mysql的配置文件
在win下配置文件时mysql的主目录下的my.ini,在linux下是etc目录下的my.cnf
设置客户端

[client]
default-character-set=utf8

设置服务器端
在老版本中和设置客户端的方法一致

[mysqld]
default-character-set=utf8

但5.6以后的版本改成了下面的命令

character-set-server=utf8

如果你不确定就试一下,如果出现1067错误就是配置文件有误,改成另一种形式即可
最后查看一下,我的已经生效了’char%’
char

web层面乱码:

1.响应乱码的原理
字节方式输出数据:
response.getOutputStream().write(“中国”.getBytes(“utf-8”));
服务器在发送中文数据时,使用的是UTF-8码表,IE浏览器没有特别指定码表时,将使用所在操作系统的默认码表,gb2312,utf-8的数据用国标2312打开就自然出现乱码问题
解决方法
在HTTP协议中提供了Content-Type响应头:

response.setHeader("Content-Type","text/html;charset=utf-8");
response.getOutputStream().write("中国".getBytes("utf-8"));

快速设置的方法:

response.setContentType("text/html;charset=utf-8");

字符方式输出数据:
Response.getWriter().write(“中国”)输出数据给浏览器,则服务器会在发送数据时将字符转换为字节后发送,tomcat6默认的编码方式为iso8859-1,不支持中文的读写,则变成了”?”
解决方法
把服务器设置为发送数据时使用的正确码表即可,两码相同防止乱码
设置浏览器打开和发送数据的编码方式

response.setContentType("text/html;charset=utf-8");
response.setCharacterEncoding("utf-8");
response.getWriter().write("中国");

2.请求乱码的原理
浏览器发送请求的编码会和打开表单页面时使用的编码一致
设置方式为pageEncoding
服务器的解析则是默认编码方式,tomcat默认的iso8859-1解码,而自生设置utf-8编码,utf-8三个字节一个汉字,iso8859-1一个字节一个字符,则中国在utf-8的编码下为6个字节,iso8859-1下则显示6个问号
解决思路
对post提交做设置

request.setCharacterEncoding("utf-8");

设置utf8处理请求参数,但有一定的作用域和处理范围,只能处理post

对于get提交的乱码
可以使用底层转化:

String addr = request.getParameter("addr");

将乱码解析为二进制数据

byte bs = addr.getBytes("iso8859-1");

解码方式换成utf8

addr = new String(bs,"utf-8");

注意

有可能你已经改好了可是还是乱码存在,那是因为你原来的表和库依然为拉丁的编码,并没有改成utf8,所以会出现这样的问题,对应修改即可,如果查看表则使用

show create table table_name\G

schema

版权声明:本文为博主原创文章,未经博主允许不得转载。

数据库中文乱码解决方案总结,tomcat+mysql+hibernate

数据库中文乱码解决方案汇总
  • chenjiazhu
  • chenjiazhu
  • 2016年07月15日 10:35
  • 1645

写入mysql的中文乱码问题

提前说明我的问题,我一开始发现写入数据库的中文乱码,便连续进行了各种操作: l  修改mysql的配置文件my.ini,设定了所有编码格式为utf-8,确认了表的字符集也为utf-8; l  在每...
  • u011421398
  • u011421398
  • 2016年07月22日 10:10
  • 988

项目--解决MySQL数据库插入中文乱码

【情景再现】          如图,在项目中使用MySQL数据库,在做插入操作时,写入英文字符没有问题,但是插入中文的时候数据库中的数据就像是这样:      【解决办法】      (1)...
  • u013047584
  • u013047584
  • 2016年04月23日 14:56
  • 12035

Mysql中文乱码问题完美解决方案

原文:http://www.2cto.com/database/201108/101151.html MySQL会出现中文乱码的原因不外乎下列几点: 1.server本身设定问题,例如还停留在lat...
  • luoweifu
  • luoweifu
  • 2013年04月21日 22:51
  • 180218

mysql数据导出乱码

早上有人都跟我说从mysql导出来的数据都是乱码的,里面的汉字都乱了,一个人跟我说我觉得没什么,应该是它哪里弄错了吧,之前项目组长发给我的版本还是没有问题的,然后,又一个,跟我说乱码了,我赶紧去看了看...
  • u013086062
  • u013086062
  • 2016年03月12日 13:59
  • 1791

彻底解决mysql中文乱码

mysql是我们项目中非常常用的数据型数据库。但是因为我们需要在数据库保存中文字符,所以经常遇到数据库乱码情况。下面就来介绍一下如何彻底解决数据库中文乱码情况。...
  • u012410733
  • u012410733
  • 2017年03月12日 16:19
  • 12983

mysql数据库中数据表出现乱码解决办法

最近发现,在MySQL的dos客户端输出窗口中查询表中的数据时,表中的中文数据都显示成乱码,如下图所示:      上网查了一下原因:之所以会显示乱码,就是因为MySQL客户端输出窗口显示...
  • pangqiandou
  • pangqiandou
  • 2016年10月29日 12:37
  • 944

mysql数据库插入中文乱码或问号--解决历程

今天在做一个项目的时候用到了数据库,需要将winform中的数据导入到数据库,一开始写的时候因为都是英文界面没有注意,等有一个需要导入的中文时问题来了!!出现了问号,郁闷,,好吧,既然问题来了项目时间...
  • u014605728
  • u014605728
  • 2016年04月07日 18:08
  • 896

解决Mysql下中文乱码全是问号的问题

又是头疼的中文乱码问题,刚开始我一直用的本地数据库测,这没问题啊,一点问题都没,但我忘记了安卓和web用的是服务器上我搭的数据库,测了一下,果然乱码了。试了网上不少方法,虽然不知道具体哪个方法给弄好了...
  • violet_echo_0908
  • violet_echo_0908
  • 2016年05月25日 15:28
  • 9650

Java提交到MySQL数据库出现乱码的原因

一、场景说明:              从前端提交数据到服务器端,服务器端处理后,提交数据到MySQL数据库。当前端提交的数据中包含中文字符时出现了乱码的问题。     二、尝试的解决方案:    ...
  • baiguodong
  • baiguodong
  • 2016年08月06日 16:14
  • 2566
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MYSQL数据库乱码解决方案
举报原因:
原因补充:

(最多只允许输入30个字)