0%

mysql charset admin django

中文乱码永远是程序猿的痛!!

今天使用django-admin就遇到了乱码问题,是仿照django book的model用法,做一个资源管理平台出现的问题。

代码提示:mysql不能正确处理中文字符,于是一路google找到几个可能的解决措施:

1、修改admin.py

import sys;   
reload(sys);  
sys.setdefaultencoding("utf8") 

这个办法曾经帮助我解决了chatbot项目的乱码问题。

2、修改mysql的配置文件/etc/my.cnf
方案一:

[mysqld]
character-set-server=utf8 
[client]
default-character-set=utf8 
[mysql]
default-character-set=utf8

方案二:utf8mb4兼容utf8,且比utf8能表示更多的字符,是utf8字符集的超集。所以现在一些新的业务,比如ISO等,会将MySQL数据库的字符集设置为utf8mb4。

[client]  
default-character-set=utf8mb4  

[mysqld]  
character-set-server = utf8mb4  
collation-server = utf8mb4_unicode_ci  
init_connect='SET NAMES utf8mb4'  
skip-character-set-client-handshake = true  

[mysql]  
default-character-set = utf8mb4  

3、关键还是要会使用命令诊断问题所在。
我的问题出在新建的数据库中表单变量的字符码设置不是utf8,后来把数据库drop掉,重新配置my.cnf文件,然后重建mysql数据库就没问题了。

4、常用的mysql命令和django命令。

mysql -u db_user -p
SHOW DATABASES;
CREATE DATABASE blog_data;
drop database mydb;
SHOW DATABASES;

CTRL + D退出mysql。

通过show variables 命令查看字符编码,发现部分变量的编码果然不是utf8,难怪乱码。

show variables like '%char%’;

尝试重制响应的字符编码设置。

set character_set_server=utf8;
set character_set_database=utf8;
show variables like '%char%’;

结果无效,于是进一步查看响应的数据库及其表单:

use my_db;
show tables;
show full columns from table1; //这条命令可以看到table1中的变量情况,发现果然编码有问题。 

尝试修改这个表单中的变量设置,也就是my_db.table1表单中的my_var变量字符编码。

ALTER TABLE my_db.table1 MODIFY COLUMN my_var VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;

错误代码位置发生了改变,这说明改动有效,于是重新建立数据库(见3)。

5、Django的一些命令。

python manage.py createsuperuser #生成admin登陆的超级用户和密码
python manage.py makemigrations #当更改model时,通过此命令把变动反应到数据库中
python manage.py migrate
感谢您的鼓励和打赏!