带有遗留数据库的 Django 模型 utf8

Posted

技术标签:

【中文标题】带有遗留数据库的 Django 模型 utf8【英文标题】:Django model utf8 with legacy database 【发布时间】:2013-03-27 04:31:05 【问题描述】:

我有一个带有 latin1 编码的旧数据库。我无权将其更改为 utf8。当我从模型中读取值时,我收到了乱码。

我尝试使用 name.decode('utf-8') 但它抛出了一个 unicode 错误:

 'ascii' codec can't encode characters in position 4-12: ordinal not in range(128)

name.encode('utf-8') 也不起作用。

【问题讨论】:

如果是latin-1,为什么要改成utf-8? 应该是一些中文文本。如果 latin1 显示一些乱码。 【参考方案1】:

如果您有权访问您的“settings.py”文件,那么您可以更改设置,说明您的数据库正在使用“latin1”。

以下是“settings.py”文件中“DATABASES”配置的示例。

DATABASES = 
    'default': 
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'test_db',
        'USER': 'root',
        'PASSWORD': '',
        'HOST': '',
        'PORT': '3306',
        'OPTIONS': 
                    'charset': 'latin1',
                    'use_unicode': True, ,
    , 

我之前也遇到过类似的问题,请查看此处的链接Django database charset issue

【讨论】:

谢谢。这行得通。但是您知道如何为单个表设置字符集吗?有些表使用 latin1,有些使用 utf-8。 AFAIK Django 不支持为单个表设置字符集。但我想会有办法做到这一点。【参考方案2】:
u = unicode(name,'latin-1')
print u.encode('utf-8')

【讨论】:

以上是关于带有遗留数据库的 Django 模型 utf8的主要内容,如果未能解决你的问题,请参考以下文章

如何在不同的数据库中使用带有外键的 django 模型?

带有数据库查询的 Django charfield 模型

将遗留的 mySQL 数据库集成到新的 Django ORM 驱动的数据结构中

带有 XMLField 的 Django 模型

不同子系统采用不同MySQL编码LATIN1和UTF8的兼容

带有来自模型的数据库的 PHP Orm