前言
在SSH框架搭建完成后,编写一个小的注册程序时,发现了各种由于编码不统一所出现的乱码问题。在程序或数据库中发现乱码问题,可以参考以下尝试解决。
另:乱码一般多为汉字乱码,此时所要选择的编码格式就应该为GBK或者UTF-8,两者的区别是:GBK编码是指中国的中文字符,它包含了简体中文与繁体中文字符;UTF-8编码是一种全国家通过的一种编码,包含多个国家的语言。本文选择UTF-8编码做演示。
mysql字符集修改
mysql数据中文显示乱码。
- 修改数据库字符集:
ALTER DATABASE db_name DEFAULT CHARACTER SET character_name [COLLATE ...];
- 把表默认的字符集和所有字符列(CHAR,VARCHAR,TEXT)改为新的字符集:
ALTER TABLE tbl_name CONVERT TO CHARACTER SET character_name [COLLATE ...]
如:ALTER TABLE logtest CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
- 只修改表的默认字符集:
ALTER TABLE tbl_name DEFAULT CHARACTER SET character_name [COLLATE...];
如:ALTER TABLE logtest DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
- 只修改字段的字符集:
ALTER TABLE tbl_name CHANGE c_name c_name CHARACTER SET character_name [COLLATE ...];
如:ALTER TABLE logtest CHANGE title title VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci;
- 查看数据库编码:
SHOW CREATE DATABASE db_name;
- 查看表编码:
SHOW CREATE TABLE tbl_name;
- 查看字段编码:
SHOW FULL COLUMNS FROM tbl_name;
JSP中文参数传入实体类后乱码
在web.xml添加中文字符过滤器:
<!-- spring的中文过滤器 -->
<filter>
<filter-name>encodingFilter</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>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Strut2指定web应用默认编码集
在标签下添加:
`<constant name="struts.i18n.encoding" value="utf-8" />`
hibernate连接mysql编码设置
通过hibernate保存到Mysql数据库中中文乱码,设置Hibernate的编码,有两种方式:
- hibernate.cfg.xml或applicationContenxt.xml文件中设置,如下:
< property name ="url" > jdbc:mysql://localhost:3306/test?useUnicode=true& characterEncoding=utf8 </ property >
注意:在xml中,用&代替&, 否则启动检测xml配置文件格式报错。
通过hibernate.properties设置
#hibernate.connection.url jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8