MySQL裡中文顯示亂碼、Navicat裡中文顯示“??”問號的問題解決
最近在用Ubuntu寫python程式碼時用到了個問題,在Navicat裡面插入的中文資料,去終端裡執行sql語句或者用python程式執行讀取出來的結果是亂碼。而用sql語句在命令列裡插入的中文資料,在Navicat裡顯示的是“??”一堆問號。
解決方法:
1、首先確定的是自己mysql的字符集是否都是utf8,通過mysql -u root -p然後輸入資料庫的密碼登陸。在mysql命令列查詢自己的字符集是否都是utf8(除了檔案的編碼是binary)。
show variables like 'char%';
如果不是utf8的話,通過
set character_set _clinet=utf8;
等命令修改字符集,其他的變數修改方法一樣,將client換成需要改的connection等變數名稱即可。
2、完成了以上步驟後發現問題還是存在,確認問題是出在Navicat客戶端上,於是我打開了Navicat客戶端,完成以下這些步驟後發現還是不能解決問題。如果你原本是打算按以下方法解決可以先暫停下,按照下一步驟3去試試先。
- 右鍵連線-編輯連線(有的版本似乎叫連線屬性)-高階,在編碼下拉項裡確認為utf8。
- 右鍵資料庫-編輯資料庫-編碼下拉欄確認為utf8。
- 右鍵資料庫-新建查詢-通過
set character_set_clinet=utf8;
等命令修改所有編碼不為utf8的變數的字符集。
- 右鍵出現“??”問號的表-設計表-點每個欄位的型別,確認每一個欄位的字符集為utf8。
3、確認問題出在Navicat上,但確認所有字符集都為utf8了還是不能解決,於是我回到了開啟Navicat客戶端以後第一步做的事上,右鍵連線-編輯連線(有的版本似乎叫連線屬性)-高階,在編碼下拉項裡選擇了第一項,自動。
刷新出現問號的表,發現問號都變成了正常的漢字,之前在Navicat客戶端手動輸入的漢字變成了亂碼(和終端裡MySQL命令列查詢結果出現了一致),將這些亂碼在Navicat中重新輸入以後再次測試,問題解決,mysql命令列裡查詢沒有了亂碼,Navicat裡面的問號也沒有了。