數據庫出現亂碼主要是因為服務器端與客戶端,或者是數據庫本身編碼不同造成的。
主要的情況如下:
一.mysql數據庫的問題
測試:
使用mysql -u root -p登錄數據庫,輸入
我這個是改完之后的,保證所有的都是utf8.
方法是:
Mac:
找到安裝路徑下的my.cnf文件,到/usr/local/mysql/support-files
目錄下將mac上的mysql配置文件模板my-default.cnf
拷貝到/etc
下,並將文件名改成my.cnf
,之后用文本編輯器打開,添加一下內容。后面兩個要放到文件最后,要不會啟動不了mysql。之后保存,測試一下是否可以使用
[mysqld]
character-set-server=utf8 #注意這行不要寫成 default-character-set=utf8
[client]
default-character-set=utf8
[mysql]
no-auto-rehash
windows:
找到my.ini文件位於C:\ProgramData\MySQL\MySQL Server 5.1目錄下,如果找不到就在命令行MySQL 5.6 Command Line Client的快捷方式配置中(也就是右擊找到屬性),查看目標一欄,這個就是my.ini的地址
二.navicat的問題(其他數據庫工具沒用過,可能也有這個問題)
步驟與mysql相同,這是修改完之后的,如果不一樣就是這個的問題了(折騰了一下午,就是這個問題)
解決:
在上面的步驟(也包括第一個)無誤的基礎上,重啟mysql
Mac:
sudo /usr/local/mysql/support-files/mysql.server restart
windows:
net stop mysql;停止mysql
net start mysql;啟動mysql
在navicat中創建新的連接,設定編碼集為自動或者是utf8都可以,之后就可以了
————————————————————————————————————————————————————————————————————————————————————
之后的就是頁面方向出現的問題了,如果確認多次頁面接收沒有問題,基本可以不用看
————————————————————————————————————————————————————————————————————————————————————
三.jsp—— >servlet的問題(也有可能是另一個接收數據的jsp頁面)
測試
在接收端將接收到的數據使用system.out.print()輸出
結果和操作:
1.如果產生亂碼:在接收頁面之前使用,下面兩行代碼
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");之后就可以照常使用set函數對變量進行賦值了。
2.如果沒有產生亂碼:該層次亂碼可能性排除
二.Dao層的問題(也就是在java中寫的數據庫語句的部分)
測試
在dao層中將接收到的數據使用system.out.print()輸出,也就是這個地方
結果和操作:
出現的可能性不大,我沒有出現過(如果出現歡迎在評論區補充)
三.Connection的問題(沒有遇見過,不過網上有的給出過關於這個的答案)
結果和操作:
在connection的url之后添加
?useUnicode=true&characterEncoding=utf-8
當然如果你連接數據庫的方式和我一樣,有useSSL=false的話,你還要在后面再加一個&,如圖