【问题标题】:Django database charset issueDjango数据库字符集问题
【发布时间】:2014-02-26 02:15:20
【问题描述】:

我有以下问题,经过一个小时的搜索,我没有得到适当的解决方案。

我有一个包含“长文本”列的 MySQL 数据库表。为了使用更少的空间来存储该文本列中的文件内容,PHP 中使用了以下压缩方法来存储内容。

$compressed_content = bzcompress($content);
$db_compressed_content = addslashes($compressed_content);

“db_compressed_content”使用 PHP 本身存储在数据库中。

现在我可以使用 Django 来利用数据库内容了。我能够提出模型类来表示表格。 'TextField' 用于表示该特定列。

这是我的确切问题,我使用 python 的 'bz2.decompress()' 来解压缩并获取文本内容,但是当我尝试这样做时,我在 django 下得到了 'UnicodeEncodeError'。

仅供参考,用于使用 PHP 在数据库中存储内容的字符集是“latin-1”。

【问题讨论】:

  • 请将答案从问题中移到下面的正确答案中,这样您就可以将答案标记为已回答并帮助其他人寻找解决方案
  • 根据您的建议,我已将答案向下移动 :-)

标签: django django-models character-encoding


【解决方案1】:

答案: Django 使用 'utf-8' 作为数据库的默认字符集,因此如果您的数据库使用任何其他字符集(大多数旧数据库将配置为 'latin1'),那么 charset需要在数据库设置下明确提及。设置示例:

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

除此之外,如果您不需要使用 unicode,那么您可以将 'use_unicode' 设置为 False,但我认为不建议这样做。

干杯!!!

【讨论】:

    猜你喜欢
    • 2013-04-05
    • 2018-03-04
    • 2012-04-07
    • 2013-03-20
    • 2020-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多