【发布时间】:2018-08-21 15:53:59
【问题描述】:
我的问题是,对于我的一个模型,相应管理页面的搜索栏正在执行一个大小写 sensitive 搜索,而它应该是一个大小写 insensitive 搜索默认。
从我能找到的 here 来看,我觉得这可能与数据库编码有关,但从 the doc 来看,它说 Django 假定所有内容都是 UTF-8 编码的,我检查了我的 MySQL 表和字段以 UTF-8 编码。
可能是因为我的某个领域中存在希腊字符吗?如何在至少不包含希腊字母的字段中强制进行不区分大小写的搜索?目前,搜索对所有字段都区分大小写。但它适用于其他模型(不区分大小写)。
型号:
class MyModel(models.Model):
id = models.AutoField(primary_key=True)
field1 = models.CharField(max_length=200) # Might contain greek letters
field2 = models.CharField(max_length=200, unique=True)
不共享管理类代码,因为这里没有什么花哨的东西。只是list_display、search_fields、ordering 和fieldsets 的标准组合。
使用 Django 1.10
编辑
这是相关表的SHOW CREATE TABLE 的输出:
CREATE TABLE `my_model` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`field1` varchar(200) COLLATE utf8_bin NOT NULL,
`field2` varchar(200) COLLATE utf8_bin NOT NULL,
# Non relevant other fields
PRIMARY KEY (`id`),
UNIQUE KEY `my_model_field2_63f9df5e_uniq` (`field2`)
) ENGINE=InnoDB AUTO_INCREMENT=657 DEFAULT CHARSET=utf8 COLLATE=utf8_bin
现在我看到了,这可能是由于_bin 对吧?我应该转换成带有_ci 的东西吗?在 Django 中这样做的方式是什么?
【问题讨论】:
-
SHOW CREATE TABLE;-- 需要检查被搜索列的排序规则。 -
我用
SHOW CREATE TABLE;的输出编辑了这个问题。
标签: mysql django django-models encoding character-encoding