mysql 模糊查询中文查不到,Mybatis使用MySQL進行模糊查詢時輸入中文檢索不到結果...

項目開發中,在做Mybatis動態查詢時,遇到了一個問題:MySQL在進行LIKE模糊查詢時,輸入英文可以正常檢索出結果,但是輸入中文后檢索得到的結果為空。

由於是使用GET方式請求,所以為了確保中文不亂碼,在控制台接收到請求參數后,對中文進行了一次編碼。try {

realName = new String(realName.getBytes("GBK"), "UTF-8");

} catch (UnsupportedEncodingException exception) {

logger.error("realName在進行UTF-8編碼時出錯," + exception.toString());

}

Mybatis動態SQL映射,具體的SQL如下:

b5fa4af274de5a9a6a2650d43ea18e19.png

首先使用模糊查詢檢索英文。啟動項目,輸入英文“test”,按照英文內容檢索得到的結果如下圖:

ce5b2a20ae5a0c0c5f4e0335ffd5764c.png

我們可以看到SQL正常執行,使用“test”總共檢索出2條結果,數據庫中對應字段的內容分別是張三test02和張三test,正常來說,如果我們輸入中文“張”也可以查詢到這兩條數據,下面試試使用模糊查詢檢索中文。啟動項目,輸入中文“張”,檢索得到結果如下圖:

9e05b1daee46aba0005405a68903ead4.png

我們可以看到這里檢索出的結果是0條記錄,並且條件的中文內容沒有亂碼,和預想中的並不一樣。復制同樣的SQL語句到SQLyog中執行是可以正常檢索出結果的。

在使用SQLServer時並沒有出現過這樣的問題,這次使用MySQL才出現這種情況,懷疑是在Mybatis配置數據源environment時SQLServer和MySQL配置的內容有差異,仔細對比並上網查閱相關內容后發現,MySQL在進行中文檢索時,需要在jdbcURL后增加參數useUnicode=true&characterEncoding=UTF-8來指定編碼格式。

92d191c6ef1c87eab71dbbd065a35a85.png

完整的URL:jdbc:mysql://127.0.0.1:3306/fanyl_web?useUnicode=true&characterEncoding=UTF-8

在修改了MySQL的jdbcURL后,啟動項目,繼續輸入中文“張”,檢索得到結果如下:

a59534702b46a1872985a9077f45568d.png

總共檢索出3條結果,至此Mybatis使用MySQL進行模糊查詢時輸入中文檢索不到結果的問題就解決了。

另外再附上MySQL的jdbcURL中常見的幾個參數說明:

參數名稱

參數說明

user

數據庫用戶名(用於連接數據庫)

password

數據庫密碼(用於連接數據庫)

autoReconnect(true/false)

當數據庫連接異常中斷時,是否自動重新連接

maxReconnects

autoReconnect設置為true時,重試連接的次數

initialTimeout

autoReconnect設置為true時,兩次重連之間的時間間隔,單位:秒

useUnicode(true/false)

是否使用Unicode字體編碼

characterEncoding

當useUnicode設置為true時,指定字符編碼

relaxAutocommit(true/false)

是否自動提交

connectTimeout

和數據庫服務器建立socket連接時的超時,單位:毫秒。

socketTimeout

socket操作(讀寫)超時,單位:毫秒。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值