錯誤1 :
java.sql.SQLException: Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '=' Query: select * from librarian where username = ? and password = ? Parameters: [張飛, 123]
報錯原因:
Mysql 建庫,建表,字段的編碼方式不對
修改方法:
如果建庫未修改編碼方式,則需要修改庫 -> 表 -> 表中字段的編碼方式
ALTER DATABASE coursework CHARACTER SET utf8;
ALTER TABLE students CHARACTER SET utf8;
ALTER TABLE students CHANGE sex sex VARCHAR(2) CHARACTER SET utf8;
ALTER TABLE librarian CHARACTER SET utf8;
ALTER TABLE librarian CHANGE username username VARCHAR(20) CHARACTER SET utf8;
ALTER TABLE librarian CHANGE PASSWORD PASSWORD VARCHAR(20) CHARACTER SET utf8;
錯誤2 :中文亂碼問題
2.1 tomcat服務器啓動打印日誌亂碼:
控制枱(gbk)和tomcat(utf-8)編碼方式不一樣
解決方法:
修改conf目錄下的logging.properties 文件
2.2 表單提交參數中文亂碼問題
瀏覽器默認對中文進行編碼的方式為UTF-8,服務器端接收到參數以後若解碼方式不一致則會產生亂碼
- get方式提交中文不會產生亂碼 -> get提交參數拼接在url後 -> tomcat 8版本以後內部對於URL編輯碼採用的是UTF-8
- post方式提交中文會亂碼 -> post提交參數是在請求體中 -> 服務器默認解碼方式為 ISO-8859-1
解決方式:
指定解碼方式:
void setCharacterEncoding(String env)
放在servlet首行,或在全局Filter中配置
2.3 響應中文亂碼問題
printwriter.write("中文");
服務器端對中文默認編碼方式 ISO-8859-1, 而瀏覽器默認的解碼方式為GBK(windows 10系統)
解決方法:
方法一:更改服務器端編碼方式使其和瀏覽器端解碼方式保持一致
- 設置服務器編碼方式和瀏覽器端一致,GBK
- 寫在servlet首行
resp.setCharacterEncoding("GBK")
方法二:使用方法直接將服務器和瀏覽器端編解碼方式設置為一致
resp.setContextType("text/html;charset=utf-8")
2.4 tomcat服務器啓動訪問項目中的html靜態資源中文出現亂碼問題
修改配置文件 - server.xml
web.xml