当我插入 MySQL 数据库时,为什么会收到此 UnicodeEncodeError 错误?

发布于 2024-08-31 16:17:07 字数 480 浏览 4 评论 0原文

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
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 2: ordinal not in range(128)

I changed my database default to be utf-8, and not "latin"....but this error still occurs. why?

This is in my.cnf. Am I doing this wrong? I just want EVERYTHING TO BE 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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

要走干脆点 2024-09-07 16:17:07

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

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

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

MySQLdb.connect(read_default_*) options won't set the character set from default-character-set. You will need to set this explicitly:

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

Or the equivalent setting in your django databases settings.

瑕疵 2024-09-07 16:17:07

如果你从 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

If you get an exception from Python then it's nothing to do with MySQL -- the error happens before the expression is sent to MySQL. I would presume that the MySQLdb driver doesn't handle unicode.

If you are dealing with the raw MySQLdb interface this will be somewhat annoying (database wrappers like SQLAlchemy will handle this stuff for you), but you might want to create a function like this:

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文