您的位置:首页 > 数据库 > MySQL

mysql编码问题以及中文乱码解决

2017-08-14 13:18 681 查看
1)、检查当前数据库编码。

使用语句:

?
2)、如果不是以上情况,需要将mysql编码设置为utf-8。具体步骤如下:

如果安装mysql时安装了“MySql Sever Instance Configuration Wizard”,则只需要启动该程序进行相应设置即可。如下面截图中所描述,需要将默认编码设置为utf8。 

如果没有该程序,需要手动修改mysql编码。

 1>、  编辑MySql的配置文件

MySql的配置文件Windows下一般在系统目录下或者在MySql的安装目录下名字叫my.ini,可以搜索,Linux下一般是 /etc/my.cnf

--在 [mysqld] 标签下加上以下内容:
default-character-set = utf8 

character_set_server = utf8 

注意:如果此标签下已经存在“default-character-set=GBK”类似的内容,只需修改即可。 

--在 [mysql]  标签下加上一行 default-character-set = utf8
--在 [mysql.server]标签下加上一行 default-character-set = utf8

--在 [mysqld_safe]标签下加上一行 default-character-set = utf8
--在 [client]标签下加上一行 default-character-set = utf8

character_set_client为客户端编码方式;

character_set_connection为建立连接使用的编码;

character_set_database数据库的编码;

character_set_results结果集的编码;

character_set_server数据库服务器的编码;

2>、  重新启动MySql服务

 Windows可在服务管理器中操作,也可使用命令行:
 net stop mysql 回车

 net start mysql 回车
 服务名可能不一定为mysql,请按自己的设置

 Linux下面可是用 service mysql restart
如果出现启动失败,请检查配置文件有没有设置错误

3>、  查看设置结果

 登录MySql命令行客户端:打开命令行mysql –uroot –p 回车,输入密码

 进入mysql后 执行 :show variables like "% character %";

 显示结果应该类似如下:
| character_set_client | utf8 | 

| character_set_connection | utf8 | 

| character_set_database | utf8 | 

| character_set_results | utf8 | 

| character_set_server | utf8 |

| character_set_system | utf8 | 

| character_sets_dir | /usr/share/mysql/charsets/ |


如果仍有编码不是utf8的,请检查配置文件,也可使用mysql命令设置: 

?
另外:建立数据库时可以使用以下命令:

?
修改数据库编码的命令为:alter database app_relation character set utf8; 

5、如果你采用的是外部接入的方式,可以在连接中确定请求的编码格式如:jdbc:mysql://localhost:3306/mysql?useUnicode=true&characterEncoding=utf-8(注意:不要出现任何空格,否则出错)

 6、JSP页面传进来的参数中文就是乱码,则是前台的问题,这个时候写一个过滤器就好了,可以写如下的一个过滤器

  

public class EncodingFilter implements Filter {

String encoding;

private static final String DEFAULT_CHARACTER_ENCODING = "UTF-8";

public EncodingFilter() {

}

public void destroy() {

}

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

// TODO Auto-generated method stub

// place your code here

// pass the request along the filter chain

try {

if ((encoding!=null)&&(encoding.length()>0)) {

request.setCharacterEncoding(encoding);

//验证是否进入这个if语句

System.out.println("in filter and encoding :"+encoding);

}else {

request.setCharacterEncoding(DEFAULT_CHARACTER_ENCODING);

}

} catch (UnsupportedEncodingException e) {

request.setCharacterEncoding(DEFAULT_CHARACTER_ENCODING);

e.printStackTrace();

}

chain.doFilter(request, response);

}

public void init(FilterConfig fConfig) throws ServletException {

//获取配置文件中的encoding

encoding = fConfig.getInitParameter("encoding");

//确认web容器初始化的时候这个filter也已经初始化了

System.out.println(encoding);

}

}

注意这有一个关键的地方,你使用过滤器的话,表单的提交方式必须是post,如果还是get方式,则还是乱码的

或者有个笨办法

7. 在b.jsp中把String name=request.getParameter("name");修改为

String name=new String(request.getParameter("name").getBytes("ISO-8859-1"),"GB2312");
2. 这时再在页面上显示,则就是中文了。

这样也可以的

 

  2、第二种造成的方法就是数据库里面的字符集的问题,这个的问题不是比较专业的从事数据库的朋友,一般不太理解其中的原理,目前我只能参考别人的办法

转载来自:http://www.jb51.net/article/90304.htm
http://blog.csdn.net/red4711/article/details/6007248 http://blog.csdn.net/yipiankongbai/article/details/16937815 http://blog.csdn.net/frinder/article/details/7041723
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐