django==1.11.9
mysql版本5.6.38
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
+----------------------+-----------------+
我的数据中有一个强调字段,我设置了唯一字段。但是,查询中将显示多个结果。虽然我知道你可以 ALTER TABLE test DEFAULT COLLATE utf8_bin;
设置表属性。但我认为更好的方法是通过查询来添加条件 SELECT * FROM test WHERE name = 'a' collate utf8_bin;
.
现在我不知道如何在queryset方法中使用它。当我在插入数据时通常使用 update_or_create()
方法,这将直接导致其他形式(带重音)的数据未插入其中。
这个查询条件可以在django的queryset方法中扩展吗?
1条答案
按热度按时间dwbf0jvd1#
ALTER TABLE test DEFAULT COLLATE ...
只更改“默认值”。也就是说,当您稍后添加一列时,它将获得该排序规则。取而代之的是:
ALTER TABLE test MODIFY xyz ... COLLATE ...
对于每个需要更改的列。或者您可以盲目地更改所有varchar/text列:
将表测试转换为字符集。。。整理。。。; 请注意,当您有
WHERE name = 'a' COLLATE ...--它将必须检查所有行,即使您有
INDEX(name).
..._bin排序规则检查位;也就是说,它们区分大小写和重音。
..._ci排序规则不区分大小写和重音。 我会把校勘放在
WHERE` 只在需要更改排序规则时才使用子句。否则,将其构建到列定义中。