錯誤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 文件

stringRedisTemplate 超時失效_編碼方式

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

stringRedisTemplate 超時失效_服務器_02

web.xml

stringRedisTemplate 超時失效_服務器_03