【问题标题】:pickle unicode strings with non-ascii caracters to mysql in django将非ascii字符的unicode字符串腌制到django中的mysql
【发布时间】:2013-06-07 06:09:18
【问题描述】:

考虑一下我有一本字典,我想使用 python 的 pickle 将其存储在 db 中。

我的问题是:我应该使用哪个 django 模型的字段?

到目前为止,我一直在使用 CharField,但似乎有错误:

我腌制一个 u'\xe9'(即 'É'),我得到:

Incorrect string value: '\xE1, ist...' for column 'edition' at row 1

(“ist...”是因为我在 'É' 之后有更多文字)。

我正在使用

data = dict();
data['foo'] = input_that_has_the_caracter
to_save_in_db = cPickle.dumps(data)

我应该使用二进制字段和使用二进制协议的pickle吗?因为我必须更改数据库才能做到这一点,所以最好先确定...

【问题讨论】:

    标签: python django encoding django-models pickle


    【解决方案1】:

    您应该检查您的数据库后端中的表和列是否使用了正确的编码(我假设是 MySQL,因为您的错误消息似乎来自它)。在 MySQL 中,列可以具有与表不同的编码。看看是不是 UTF-8。

    【讨论】:

    • 谢谢。但是,这就是“MySQL”方法。我正在寻找 Django 方式,因为在没有正确告诉 Django 的情况下将纯 MySQL 更改组合在表上并不是一个好主意。
    • 您的 django 代码很好(就使用 CharField 处理腌制数据而言 - 您可能需要添加额外的步骤以确保将“input_that_has_the_character”转换为 unicode),只是您的数据库似乎没有正确设置。您的 django 代码按预期将 unicode 值传递到数据库中,但您的数据库似乎没有识别它。这就是为什么你应该检查你的数据库设置。
    • 我确认将列更改为 utf8 (utf8_swedish_ci) 会出现同样的问题。 ://
    • 如果将其设置为 utf-8_general_ci 会怎样?
    猜你喜欢
    • 2013-05-27
    • 1970-01-01
    • 2011-06-05
    • 2010-12-09
    • 1970-01-01
    • 2015-07-01
    相关资源
    最近更新 更多