特定の目的のために、データベース内のフィールド照合をutf8_unicode_ci
からutf8_bin
に変更する必要がありました。変更により、Pythonに来るデータ型が変更されることが判明しました。mysql-python照合の問題:Unicodeデータ型を強制する方法?
質問は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のように振る舞いますが欲しいです。
'SET NAMES utf8'? – Robus
@ Roob、 'charset = utf8'はまったく同じです – newtover
私はコメントとして投稿したのは確かではありませんでした:)実際にはPython側の変数をデコードするのはmysqlよりも手間がかかりません。 – Robus