【发布时间】:2012-12-04 23:25:44
【问题描述】:
我编写了一个基本脚本,可以将数千个值导入 Django 数据库。它的外观如下:link。
这些位置以西里尔字母表示,并表示为 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。
【问题讨论】:
-
我不确定是否可以在控制台上实际打印 unicode。关于您的数据库,请检查您的数据库的默认编码,并确保它是 UTF-8。例如。 MySQL 通常有一些其他的基于 ascii 的编码。
-
@JosvicZammit 为清楚起见进行了编辑。我什至可以很好地打印原始数据,但不能打印保存的字段值。
-
我认为是因为 utf8_bin。它将 unicode 数据存储为二进制表示。尝试将排序规则设置为
utf8_general_cs或utf8_general_ci。