1,設置mysql默認編碼
首先查詢一下show variables like 'character%';
確定所有的character都設置成utf-8
參考 http://www.diybl.com/course/7_databases/mysql/myxl/20081127/152726.html
mysql>show variables like 'character%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
2,
a) 設置web容器的編碼格式。爲你的servlet的doGet或doPost方法開始處加入如下代碼:
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
b) 爲每個jsp頁面指定其編碼格式。<%@ page pageEncoding="utf-8"%>
c) 在連接數據庫用的URL後加入:useUnicode=true;characterEncoding=utf-8 如:
url="jdbc:mysql:///db1?useUnicode=true&characterEncoding=utf-8",
如果是xml文件中 url="jdbc:mysql:///db1?useUnicode=true&characterEncoding=utf-8",
3,
如果還出現亂碼,則有可能是 表中的字段 的編碼不是utf-8;
如果出現亂碼的表是 book
mysql> show create table book;
+--------------------------+----------------------------+
| Table | Create Table|
+--------------------------+----------------------------+
|book | create table 'book'(
'id' int(10) unsigned NOT NULL AUTO_INCREMENT,
'bookname' varchar(45) CHARACTER SET latin1 NOT NULL,
'source' varchar(45) CHARACTER SET latin1 NOT NULL,
PRIMARY KEY('id')
) ENGINE= MyISAM DEFAULT CHARSET=utf8|
+--------------------------+----------------------------+
如果發現字段的字符集不是UTF8. 則對其進行修改
採用其他客戶端工具來設定,例如 Navicat/MySQL Front/PhpMyAdmin
或者採用 ALTER 語法來轉換字段的字符集
ALTER TABLE book CHANGE bookname bookname CHAR(20) CHARACTER SET utf8;
我在網上找到很多前2點的資料,但是怎麼弄都還是亂碼,最後才發現原來是字段的原因,折騰死了都。
參考資料:
mysql字符集 FAQ http://imysql.cn/taxonomy/term/24
設置mysql默認編碼 http://www.diybl.com/course/7_databases/mysql/myxl/20081127/152726.html
用UTF-8完全解決JSP MYSQL多國語言文字編碼問題 http://www.360doc.com/content/070428/10/16749_471035.html