【发布时间】:2012-03-01 19:12:04
【问题描述】:
出于某些目的,我不得不将数据库中的字段排序规则从 utf8_unicode_ci 更改为 utf8_bin。事实证明,这种变化导致了 Python 数据类型的变化。
问题是如何强制mysql-python将unicode对象返回给python。
这是一个显示问题的示例(显式字符集强制 use_unicode=1):
>>> con = MySQLdb.connect(..., charset='utf8')
>>> c = c.cursor()
>>> c.execute('SELECT %s COLLATE utf8_bin', u'м')
1L
>>> c.fetchone()
('\xd0\xbc',)
>>> c.description
(("'\xd0\xbc' COLLATE utf8_bin", 253, 2, 3, 3, 31, 0),)
>>> c.execute('SELECT %s COLLATE utf8_unicode_ci', u'м')
1L
>>> c.fetchone()
(u'\u043c',)
>>> c.description
(("'\xd0\xbc' COLLATE utf8_unicode_ci", 253, 2, 3, 3, 31, 0),)
在我的数据库中,字段的类型是 VARCHAR,但更改后它们的行为类似于 BINARY,这不是我想要的。
【问题讨论】:
-
@Robus,
charset=utf8完全一样 -
不确定,因此我只将其发布为评论 :) 我相信实际上“解码”变量 python 端可能比弄乱 mysql 需要更少的努力
-
@Robus,我想,问题其实不在于mysql,而在于mysql-python。我确实想知道它如何区分两种情况。光标描述相同。
标签: python mysql mysql-python