Django 連線mysql資料庫中文亂碼
版本:CentOS6.8 python3.6.4 django1.8.2 資料庫pymysql
我使用的終端是CentOS終端,CentOS桌面版安裝的pycham,windows使用Navicat連線mysql資料庫。
我遇到的情況大致這樣,在CentOS終端進入mysql,然後查詢表,中文顯示沒問題,在Navicat設定了utf-8,中文顯示也沒問題,但是當我在虛擬環境執行python manage.py shell,使用這個shell查詢,中文就亂碼了。
亂碼第一時間想到的是編碼問題,在這裡省略一萬字,通過各種查詢資料,修改配置檔案等等,然後結合各種資料資訊,終於解決了這個問題!直接進入解決方法!
1:執行pip install PyMySQL ,查找出PyMySQL的安裝位置,然後執行cd命令進入,cd /root/.virtualenvs/Cole_py3/lib/python3.6/site-packages/pymysql(這裡我的安裝目錄);
2:在這個目錄下有一個connections.py檔案,直接進入編輯,
vim connections.py;
3:進入編輯connections.py後,shift +:進入命令列,輸入/charset命令查詢,打到def ini(),如下圖所示:
把charset=’ ‘改為charset=’utf8’;儲存退出。
4:接下來在終端執行mysql,執行命令mysql -uroot -p;
5:執行資料庫後,執行命令show variables like “%char%”,如圖所示;
有幾個變數值是latin1的,要把它們改成utf8;網上有資料說執行這個命令
set character_set_client=utf8;
這個執行完之後的確是可以修改,但只是臨時的,退出資料庫重新登陸又恢復原來的資料,要把它永久修改要執行以下;
6:vim /etc/my.cnf,如下圖所示:
在這裡搜入兩行命令:
[client]
default-character-set=utf8
儲存退出!
7:再去mysql執行命令show variables like “%char%”; ,你會看到如下圖所示:
修改成功!
8:如果有用Navicat的話,要去把編碼改為自動;右擊資料庫,選擇連線屬性——高階——在編碼那裡選擇自動。
9:最後一步!你現在執行python manage.py shell或者執行mysql,然後查詢資料,顯示出來還是會亂碼的!!!因為這些資料是你之前輸入進去的,所以必須要把這些資料刪除,然後重新插入!完成!
Navicat
mysql
python manage.py shell