今天在一個web項目中遇到一個亂碼問題,框架是ssm,數據庫用的是MySQL,可是這個亂碼問題比較奇葩,數據庫裏面存的中文取出來變成了問號,存進去的中文也變成了問號,可是手動添加到數據庫中的中文取出來又是顯示正常的。一路查了不少資料,終於解決了,而後加上本身的分析,整理了一下思路。mysql
亂碼問題出現的狀況有不少種,針對web開發這一流程來講,能夠根據數據的流向來定位亂碼出現的位置。前臺發起一個請求,數據經過http協議到後被接收,這裏數據會進行一次編碼,在ssm環境下,是springMVC來攔截請求進行處理,因此在springMVC中能配置數據的編碼格式,springMVC提供的是一個filter,在web.xml中配置如下內容。web
<!-- 編碼過濾器 --> <filter> <filter-name>springfilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>springfilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
若是經springMVC攔截的中文參數沒有出現亂碼,則說明這裏的編碼沒有出現問題,而後進一步去分析數據的流向。ssm的環境下是mybatis框架與數據庫進行交互,mybatis自己對數據不會進行編碼,可是在與數據庫交互的時候會有編碼的問題,好比在jdbc配置的時候,數據庫鏈接這裏有一個編碼的參數須要配置。spring
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/user?useUnicode=true&characterEncoding=UTF-8 username=root
若是以上的配置都肯定沒有問題和,那麼很大可能性就是數據庫亂碼了,在新建數據庫的時候須要選擇一個數據的編碼方式。sql
這裏若是也沒有問題那就可能就我碰到的問題,數據庫存的中文變成問號。在MySQL的安裝目錄(默認在C:\Program Files\MySQL\MySQL Server 5.x)修改my.ini能夠解決。mysql中文顯示亂碼或者問號是由於選用的編碼不對或者編碼不一致形成的,我是經過修改my.ini配置文件解決了中文變問號的問題。5.7以後沒有這個配置文件。shell
在[client]節點下添加 default-character-set=utf8 數據庫
在[mysqld]節點下添加 (注:collation是排序方式)mybatis
character-set-server=utf8 collation-server=utf8_general_ci
修改完my.ini文件後,須要重啓MySQL服務,在cmd中輸入如下命令能夠啓動或關閉MySQL的服務,也能夠在任務管理器--->服務 中手動關閉或開啓。app
關閉服務 net stop mysql框架
開啓服務 net start mysql編碼
最後能夠登陸MySQL看看配置是否成功。
輸入 mysql -u root -p 進入mysql數據庫,若是輸入這個命令顯示MySQL不是一個命令,須要把MySQL安裝目錄下的bin 這個路徑配到環境變量中去,就可使用這個命令登陸MySQL。
輸入密碼:**
而後查看MySQL數據庫的編碼格式。
#顯示編碼格式 show variables like 'char%';
若是都顯示爲utf-8則爲配置成功。