項目開發(fā)中,在做Mybatis動態(tài)查詢時,遇到了一個問題:MySQL在進行LIKE模糊查詢時,輸入英文可以正常檢索出結果,但是輸入中文后檢索得到的結果為空。
由于是使用GET方式請求,所以為了確保中文不亂碼,在控制臺接收到請求參數后,對中文進行了一次編碼。
1
2
3
4
5
|
try { realName = new String(realName.getBytes( "GBK" ), "UTF-8" ); } catch (UnsupportedEncodingException exception) { logger.error( "realName在進行UTF-8編碼時出錯," + exception.toString()); } |
Mybatis動態(tài)SQL映射,具體的SQL如下:
首先使用模糊查詢檢索英文。啟動項目,輸入英文“test”,按照英文內容檢索得到的結果如下圖:
我們可以看到SQL正常執(zhí)行,使用“test”總共檢索出2條結果,數據庫中對應字段的內容分別是張三test02和張三test,正常來說,如果我們輸入中文“張”也可以查詢到這兩條數據,下面試試使用模糊查詢檢索中文。啟動項目,輸入中文“張”,檢索得到結果如下圖:
我們可以看到這里檢索出的結果是0條記錄,并且條件的中文內容沒有亂碼,和預想中的并不一樣。復制同樣的SQL語句到SQLyog中執(zhí)行是可以正常檢索出結果的。
在使用SQLServer時并沒有出現(xiàn)過這樣的問題,這次使用MySQL才出現(xiàn)這種情況,懷疑是在Mybatis配置數據源environment時SQLServer和MySQL配置的內容有差異,仔細對比并上網查閱相關內容后發(fā)現(xiàn),MySQL在進行中文檢索時,需要在jdbcURL后增加參數useUnicode=true&characterEncoding=UTF-8來指定編碼格式。
完整的URL:
jdbc:mysql://127.0.0.1:3306/fanyl_web?useUnicode=true&characterEncoding=UTF-8
在修改了MySQL的jdbcURL后,啟動項目,繼續(xù)輸入中文“張”,檢索得到結果如下:
總共檢索出3條結果,至此Mybatis使用MySQL進行模糊查詢時輸入中文檢索不到結果的問題就解決了。
另外再附上MySQL的jdbcURL中常見的幾個參數說明:
以上所述是小編給大家介紹的Mybatis使用MySQL模糊查詢時輸入中文檢索不到結果怎么辦,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!