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
[mysql]
default-character-set=utf8
[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8
保存退出!
7:再去mysql執行命令show variables like “%char%”; ,你會看到如下圖所示:
修改成功!
8:如果有用Navicat的話,要去把編碼改為自動;右擊數據庫,選擇連接屬性——高級——在編碼那里選擇自動。
9:最后一步!你現在運行python manage.py shell或者運行mysql,然后查詢數據,顯示出來還是會亂碼的!!!因為這些數據是你之前輸入進去的,所以必須要把這些數據刪除,然后重新插入!完成!
Navicat
mysql
python manage.py shell
改完重啟mysql數據庫