3

COLLATE 情報を SQL クエリの WHERE 部分に自動的に追加するカスタム フィールドを作成しようとしています。

class IgnoreDiacriticsField(models.TextField):

    def get_prep_lookup(self, lookup_type, value):
        if lookup_type == 'exact':
            return ' "' + self.get_prep_value(value) + '" COLLATE utf8_general_ci'

次のようなクエリを実行すると:

result = ModelClass.objects.filter(field='value')

クエリ (print result.query) が有効で、複数の行に一致する場合でも、何も見つかりません。私は何か間違ったことをしていますか?

照合順序を追加する理由は、これらのフィールドに対してクエリを実行し、発音記号を無視したいからです。

4

1 に答える 1

0

ひょっとして MySQL 1.2.1p2 を使用していませんか? Djangoのドキュメントから

MySQLdb 1.2.1p2 を使用している場合、Django の標準 CharField クラスは utf8_bin 照合でも Unicode 文字列を返します。ただし、TextField フィールドは array.array インスタンスとして返されます (Python の標準配列モジュールから)。これについて Django ができることはあまりありません。これもまた、必要な変換を行うために必要な情報が、データベースからデータを読み込むときに利用できないためです。この問題は MySQLdb 1.2.2 で修正されているため、utf8_bin 照合で TextField を使用する場合は、バージョン 1.2.2 にアップグレードしてから、上記のようにバイト文字列を処理すること (それほど難しくはないはずです) が推奨される解決策です。

于 2011-12-24T09:34:12.300 に答える