前言
在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