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

来源:互联网 发布:cordic算法看哪本书 编辑:程序博客网 时间:2024/05/16 07:07

1)、检查当前数据库编码。
使用语句:

?
1
2
show variables like '%character%';
show variables like'%collation%';

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命令设置: 

?
1
2
3
4
5
6
7
setcharacter_set_client = utf8;<br>setcharacter_set_server = utf8;
setcharacter_set_connection = utf8;
set character_set_database = utf8;
setcharacter_set_results = utf8;
setcollation_connection = utf8_general_ci;
setcollation_database = utf8_general_ci;
setcollation_server = utf8_general_ci;

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

?
1
2
3
createdatabaseapp_relationcharactersetutf8;
use app_relation;
source app_relation.sql;

修改数据库编码的命令为: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