【问题标题】:Why am I getting this UnicodeEncodeError when I am inserting into the MySQL database?为什么我在插入 MySQL 数据库时会收到此 UnicodeEncodeError?
【发布时间】:2010-05-03 21:34:14
【问题描述】:
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 2: ordinal not in range(128)

我将我的数据库默认值更改为 utf-8,而不是“latin”....但仍然出现此错误。为什么?

这在 my.cnf 中。我做错了吗?我只希望一切都是 UTF-8。

init_connect='SET collation_connection = utf8_general_ci'
init_connect='SET NAMES utf8'
default-character-set=utf8
character-set-server = utf8
collation-server = utf8_general_ci
default-character-set=utf8

【问题讨论】:

  • 这个错误发生在哪个文件/行上?
  • 它发生在我“插入”到数据库中的那一行。
  • 自从您更改了默认值后,您是否尝试过删除并重新创建数据库?
  • 不,我的数据太多了。
  • 显示产生错误的真实代码。

标签: python mysql database django encoding


【解决方案1】:

MySQLdb.connect(read_default_*) 选项不会从默认字符集设置字符集。您需要明确设置:

MySQLdb.connect(..., charset='utf8')

或您的 django 数据库设置中的等效设置。

【讨论】:

    【解决方案2】:

    如果你从 Python 中得到一个异常,那么它与 MySQL 无关——错误发生在表达式被发送到 MySQL 之前。我假设 MySQLdb 驱动程序不处理 unicode。

    如果您正在处理原始 MySQLdb 接口,这会有些烦人(SQLAlchemy 等数据库包装器会为您处理这些内容),但您可能希望创建这样的函数:

    def exec_sql(conn_or_cursor, sql, *args, **kw):
        if hasattr(conn_or_cursor):
            cursor = conn_or_cursor.cursor()
        else:
            cursor = conn_or_cursor
        cursor.execute(_convert_utf8(sql), *(_convert_utf8(a) for a in args),
                       **dict((n, _convert_utf8(v)) for n, v in kw.iteritems()))
        return cursor
    
    def _convert_utf8(value):
        if isinstance(value, unicode):
            return value.encode('utf8')
        else:
            return value
    

    【讨论】:

    • 执行 INSERT 语句时出现此错误。在 Django 中,这是...music.save()
    猜你喜欢
    • 1970-01-01
    • 2019-05-14
    • 2020-02-24
    • 2013-12-09
    • 2018-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多