数据库乱码的解决办法

时间:2022-09-20 18:05:16

解决WEB工程数据库查询或者插入结果乱码的问题一般是统一字符集编码为UTF8。一般在数据库,服务端代码和页面三个地方进行字符集的指定。

1.数据库指定字符集 :

a.修改MySQL的默认字符集,修改MySQL的配置文件,my.ini,主要的修改地方有:

[client]

port=3306

[mysql]

default-character-set=utf8
character-set-server=utf8

b.在创建数据库或者创建数据表的时候指定字符集(如果使用框架自动创建失败多半就是数据库字符集和框架指定字符集不一致)

create database xxx default charset = utf8;
create table xxx(id int )charset = utf8;

c.如果是客户端显示的问题可以

set names utf8
或者

set names gbk ;
这种方式只会对sql客户端显示格式做调整,并不会影响到数据的存储字符集

2.在连接数据库的时候指定字符集 :

a.jdbc连接数据库 :

url = jdbc:mysql://localhost:3306/graduate?useUnicode=true&characterEncoding=utf-8

b.如果使用的框架的话配置数据源url,

   <property name="connection.url">
<![CDATA[jdbc:mysql://localhost:3306/graduate?useUnicode=true&characterEncoding=utf-8]]>
</property>

<![data[]]> 表示数据,因为在xml里&被当做特殊符号,所以不能直接使用,也可以换成:

<property name="connection.url">  
jdbc:mysql://localhost:3306/graduate?useUnicode=true&amp;characterEncoding=utf-8
</property>

3.如果数据库不是乱码,控制台输出不是乱码,那就是服务端和前端页面编码格式不统一了

a.修改JSP页面编码格式为UTF8

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<% request.setCharacterEncoding("utf-8");%><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>login</title><link href="css/index.css" type="text/css" rel="stylesheet"></head><body></body></html>
b.如果是使用的servlet :

 response.setCharacterEncoding("UTF-8");
c.如果使用spring框架,可以在xml文件中配置过滤器:

      <!--设置编码方式-->
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

以上就是我遇到过的数据库乱码问题和解决办法,如果还有其他情况,我也不知道了。