問題描述:最近在用spring boot 框架做項目的時候,從前台傳中文參數請求數據的時候,不能返回具體數據,但是把前台輸出的sql語句復制到數據庫連接軟件測試的時候,又能查詢到具體數據!
經過了排查mybatis的xml中的sql語句寫法問題等后,還是沒找到問題所在。最后再用非中文的參數測試的時候,結果發現能正常查到數據,確定是
java請求mysql數據傳遞中文參數是發生了亂碼
解決方法:在配置數據庫的相關文件中,在配置URL的時候要加上useUnicode=true這個參數
因為我的是在spring boot中的,所以在我的application.yml的配置中是這樣的:
這里在記錄一下
mysql 連接url中useUnicode=true&characterEncoding=UTF-8 的作用:
添加的作用是:指定字符的編碼、解碼格式。
例如:mysql數據庫用的是gbk編碼,而項目數據庫用的是utf-8編碼。這時候如果添加了useUnicode=true&characterEncoding=UTF-8 ,那么作用有如下兩個方面:
1. 存數據時:
數據庫在存放項目數據的時候會先用UTF-8格式將數據解碼成字節碼,然后再將解碼后的字節碼重新使用GBK編碼存放到數據庫中。
2.取數據時:
在從數據庫中取數據的時候,數據庫會先將數據庫中的數據按GBK格式解碼成字節碼,然后再將解碼后的字節碼重新按UTF-8格式編碼數據,最后再將數據返回給客戶端。
注意:在xml配置文件中配置數據庫utl時,要使用&的轉義字符也就是&
例如: