解决django使用数据迁移的时候出现的乱码问题

使用Django框架编写一个博客网站,使用的mysql,使用”python3 mange.py migrate”进行数据迁移的时候出现了乱码,其实自己刚开始接触这个框架不是很清,上网搜也没得到解决方案。

总结下来就是mysql在创建数据库的时候默认的字符集不是utf-8,所以一旦表里出现中文的话就会造成乱码,可以自己在创建数据库或者表的时候设定默认的字符集。

昨天发现数据迁移的时候有乱码,自己也不知道乱码是啥意思,去网上搜也没搜到。今天问了同学才知道乱码是ascii码。

昨天在网上搜了一些乱七八糟的解决办法,根本没用。

今天知道那是ascii码之后,我在网上找了一段代码,是把十六进制的字符串转换成ascii码,并且以utf-8的形式输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def str2byte(s):
base='0123456789ABCDEF'
i=0
s = s.upper()
s1=''
while i < len(s):
c1=s[i]
c2=s[i+1]
i+=2
b1=base.find(c1)
b2=base.find(c2)
if b1 == -1 or b2 == -1:
return None
s1+=chr((b1 << 4)+b2)
return s1
s = 'C7 EB CE F0 BE C6 BA F3 BC DD B3 B5'.replace(' ','') #去掉空格
s1 = str2byte(s)
print(s1.decode('utf-8'))

结果实例:

1
2
3
4
>>> s1
'\xc7\xeb\xce\xf0\xbe\xc6\xba\xf3\xbc\xdd\xb3\xb5'
>>> print s1.decode('utf-8')
请勿酒后驾车

我的这里转码之后发现是帖子的意思,所以排除了Django出错的可能性,所以可以确定是mysql字符的错误。

ok,那怎么解决呢,网上有很多方法,我选择了简单粗暴地一种就是删掉数据库重新再建一个:

1
2
drop database databasename;
CREATE DATABASE `test2` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci

这样就新建了一个字符集是utf-8的数据库,问题就解决了。