Python Django:unicode字符串作为非unicode字符串写入数据库

Python Django:unicode字符串作为非unicode字符串写入数据库,python,django,Python,Django,我编写了一个基本脚本,将数千个值导入Django数据库。下面是它的样子: 这些位置以西里尔字母表示,并以unicode文字表示。但是,一旦我将它们保存到数据库中,它们就会被转换成似乎是编码的简单字符串,采用某种十六进制编码: >>> Region.objects.all()[0].parent '\xd0\xbe\xd0\xb1\xd0\xbb\xd0\xb0\xd1\x81\xd1\x82 \xd0\xa1\xd0\xbb\xd0\xb8\xd0\xb2\xd0\xb5\xd

我编写了一个基本脚本,将数千个值导入Django数据库。下面是它的样子:

这些位置以西里尔字母表示,并以unicode文字表示。但是,一旦我将它们保存到数据库中,它们就会被转换成似乎是编码的简单字符串,采用某种十六进制编码:

>>> Region.objects.all()[0].parent
'\xd0\xbe\xd0\xb1\xd0\xbb\xd0\xb0\xd1\x81\xd1\x82 \xd0\xa1\xd0\xbb\xd0\xb8\xd0\xb2\xd0\xb5\xd0\xbd'
令人惊讶的是,它们在管理面板中显示正确,但我在尝试使用它们时遇到了麻烦。如何将它们存储和检索为unicode


我在MySQL上运行Django 1.4.0,排序规则设置为utf8_-bin。

看起来数据是作为UTF-8字节字符串而不是Unicode字符串返回的。尝试解码它:

>>> x='\xd0\xbe\xd0\xb1\xd0\xbb\xd0\xb0\xd1\x81\xd1\x82 \xd0\xa1\xd0\xbb\xd0\xb8\xd0\xb2\xd0\xb5\xd0\xbd'
>>> x.decode('utf-8')
u'\u043e\u0431\u043b\u0430\u0441\u0442 \u0421\u043b\u0438\u0432\u0435\u043d'
>>> print x.decode('utf-8')
област Сливен

这是一个Django/MySQL“bug”。见问题。实际上是这样。

我不确定是否可以在控制台上打印unicode。关于数据库,请检查数据库的默认编码,并确保它是UTF-8。例如,MySQL通常有一些其他基于ascii的编码。@JosvicZammit为清晰起见进行了编辑。我甚至可以很好地打印原始数据,但不能打印保存的字段值。我想这是因为utf8\u bin。它以二进制表示形式存储unicode数据。尝试将排序规则设置为
utf8\u general\u cs
utf8\u general\u ci
;我不知道这是UTF-8。我会看看它是否解决了我的问题-谢谢!将数据库范围的排序规则更改为
utf8\u general\u ci
似乎也能做到这一点。