最後の 2 つは同じではありません。最初の 16 進シーケンスは、Python バイト文字列の生の表現です。Latin-1 から次のようにデコードされます。
>>> '\xf93\xd7\xfe\xd8c(\t\x9d7J\xfb\xec\xce\xcb\xfef\x96E\x94'.decode('latin1')
u'\xf93\xd7\xfe\xd8c(\t\x9d7J\xfb\xec\xce\xcb\xfef\x96E\x94'
>>> print '\xf93\xd7\xfe\xd8c(\t\x9d7J\xfb\xec\xce\xcb\xfef\x96E\x94'.decode('latin1')
ù3×þØc( 7JûìÎËþfE
しかし、2 番目の値はUnicode文字列です。Python \uxxxx
Unicode コードポイント エスケープを使用します。
>>> u'\xf93\xd7\xfe\xd8c(\t\x9d7J\xfb\xec\xce\xcb\xfef\u2013E\u201d'
u'\xf93\xd7\xfe\xd8c(\t\x9d7J\xfb\xec\xce\xcb\xfef\u2013E\u201d'
>>> print u'\xf93\xd7\xfe\xd8c(\t\x9d7J\xfb\xec\xce\xcb\xfef\u2013E\u201d'
ù3×þØc( 7JûìÎËþf–E”
したがって、Unicode リテラル値は、phpmyadmin で表示されるものと一致します。
最後の 3 文字を除いて同じです。
>>> latin1 = '\xf93\xd7\xfe\xd8c(\t\x9d7J\xfb\xec\xce\xcb\xfef\x96E\x94'.decode('latin1')
>>> unicode_literal = u'\xf93\xd7\xfe\xd8c(\t\x9d7J\xfb\xec\xce\xcb\xfef\u2013E\u201d'
>>> latin1[:-3] == unicode_literal[:-3]
True
>>> latin1[-2] == unicode_literal[-2]
True
>>> latin1[-1] == unicode_literal[-1]
False
>>> latin1[-3] == unicode_literal[-3]
False
これ以上の情報がなければ、MySQL セットアップがコードポイントとコードポイントの代わりに and を返す理由を判断するのは困難です\x96
。私はそこに相関関係を直接見ません。\x94
\u2013
\u201d
おそらく、この MySQL データベースで使用されるエンコーディングと一致するように SQLAlchemy コネクタを構成し、必要に応じてcharset
データベース接続レベル、テーブル レベル、さらには列レベルでパラメーターを設定する必要があります。