<h1>寫在前面的話</h1>
在測試搜索時出現(xiàn)的問題,mysql通過中文查詢條件搜索不出數(shù)據(jù),但是英文和數(shù)字可以搜索到記錄宁仔,中文無返回記錄。本文就是寫一下發(fā)現(xiàn)問題的過程及解決方法峦睡。
<h1>問題定位過程</h1>
打開項目地址台诗,進(jìn)入書籍信息管理
初始化的時候,回傳的結(jié)果是所有數(shù)據(jù)進(jìn)行分頁后的信息記錄赐俗,這里可以看到書名為中文的記錄拉队,但是通過搜索欄的標(biāo)題欄進(jìn)行搜索的時候,問題出現(xiàn)了阻逮,如下:
沒有返回數(shù)據(jù)粱快!
一開始我是沒有注意到這是個bug的,因為剛開始整合叔扼,很多頁面的js都有些錯誤還沒改事哭,所以我感覺可能是js出了問題,就重新看了一下本頁面的js方法瓜富,沒有錯誤鳍咱。然后就試著用英文和數(shù)字進(jìn)行搜索,得到如下結(jié)果:
都有結(jié)果返回与柑,又嘗試著用其他中文參數(shù)進(jìn)行查詢谤辜,依然沒有數(shù)據(jù)返回。打開控制臺查看后端返回的結(jié)果价捧,如圖:
后端沒有報錯丑念,只是返回了空數(shù)據(jù)。到了這一步结蟋,已經(jīng)可以清楚問題出在哪里了脯倚,就是中文亂碼問題,導(dǎo)致傳入數(shù)據(jù)庫的參數(shù)不正確嵌屎,因此無法查出數(shù)據(jù)推正。
那么中文亂碼是出現(xiàn)在哪個步驟里呢恍涂?因此又開始繼續(xù)定位問題,首先是查看http請求植榕,是否在請求時就已經(jīng)出現(xiàn)中文亂碼的問題乳丰,打開控制臺,得到如下結(jié)果:
請求頭中的title字段依然為中文字段内贮,并沒有亂碼。那么中文亂碼就不是在前端出現(xiàn)的汞斧,可能是數(shù)據(jù)庫編碼或者后端代碼出現(xiàn)了錯誤導(dǎo)致這個問題夜郁。
登錄數(shù)據(jù)庫查詢數(shù)據(jù)庫編碼,如圖:
切換到當(dāng)前數(shù)據(jù)庫粘勒,查詢數(shù)據(jù)庫的編碼格式竞端,結(jié)果為utf8,數(shù)據(jù)庫編碼格式也是正常的庙睡,通過數(shù)據(jù)庫管理工具執(zhí)行如下sql也是可以查詢到結(jié)果的:
所以問題就一定出現(xiàn)在代碼或配置中事富,導(dǎo)致程序通過jdbc與mysql間的查詢出現(xiàn)中文亂碼。
查詢程序輸出日志乘陪,如圖:
整理后:
通過跟蹤程序日志發(fā)現(xiàn)傳入的中文參數(shù)一直到dao層都沒有亂碼统台,但是查詢的結(jié)果卻出現(xiàn)了差錯,問題就是jdbc連接了啡邑。
詳細(xì)解釋可以參照前文《Spring+SpringMVC+MyBatis+easyUI整合基礎(chǔ)篇(七)JDBC url的連接參數(shù)》贱勃。
<h1>總結(jié)</h1>
處理過程總結(jié):發(fā)現(xiàn)查詢bug,定位問題谤逼,是否為前端js錯誤贵扰?是否為http請求時已經(jīng)中文亂碼?是否為后端http返回報錯流部?是否為數(shù)據(jù)庫編碼錯誤戚绕?是否為程序傳參亂碼?是否為jdbc連接錯誤枝冀?通過這一系列問題的提出與驗證舞丛,最終定位到問題并解決」看到這一過程瓷马,步驟挺多的,可能有人會說跨晴,不就是一個中文亂碼問題嗎欧聘,至于啰啰嗦嗦講一大堆嗎?我呢端盆,只是記錄一下bug修復(fù)的過程怀骤,及過程中遇到的小麻煩费封,這些都需要一一去落實的,不然怎么知道是不是js的錯蒋伦?是不是http請求傳參時就已經(jīng)亂碼弓摘?是不是數(shù)據(jù)庫編碼格式真的不是utf8......
雖然步驟有些多但是有些問題其實只需要簡單的驗證即可知道結(jié)果,重要的是細(xì)心和耐心痕届,發(fā)現(xiàn)了問題就要解決韧献,要去解決就不能怕麻煩,也不能怕找不到問題研叫,無非是你的決心和方法锤窑,而且碰到的多了,自然而然定位問題就會快很多嚷炉,共勉渊啰。
結(jié)果
通過jdbc與mysql數(shù)據(jù)庫建立連接時,如果數(shù)據(jù)庫的編碼格式為utf8申屹,那連接的URL也應(yīng)該為UTF-8的形式傳遞參數(shù)到數(shù)據(jù)庫才不會出現(xiàn)亂碼绘证,為了減少亂碼,建議數(shù)據(jù)庫的連接和傳遞的參數(shù)的編碼一致哗讥,詳細(xì)如下:
jdbc:mysql://localhost:3306/ssm_demo_db?useUnicode=true&characterEncoding=UTF-8('&'符號可能會亂碼嚷那,所以可以用轉(zhuǎn)義字符&來替換)
tip:最近開發(fā)任務(wù)慢慢增多,暫時就不更新了杆煞。