我正在尝试创建一个自定义字段,该字段会自动将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)有效并匹配多行。我做错了吗?
我添加排序规则iformation的原因是我想对这些字段执行查询并忽略任何变音符号。
答案 0 :(得分: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和 然后处理字节串(这不应该太难) 如上所述是推荐的解决方案。