django扩展查询条件`collation`

9jyewag0  于 2021-06-23  发布在  Mysql
关注(0)|答案(1)|浏览(352)

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方法中扩展吗?

dwbf0jvd

dwbf0jvd1#

ALTER TABLE test DEFAULT COLLATE ... 只更改“默认值”。也就是说,当您稍后添加一列时,它将获得该排序规则。
取而代之的是: ALTER TABLE test MODIFY xyz ... COLLATE ... 对于每个需要更改的列。
或者您可以盲目地更改所有varchar/text列:
将表测试转换为字符集。。。整理。。。; 请注意,当您有WHERE name = 'a' COLLATE ...--它将必须检查所有行,即使您有INDEX(name)...._bin排序规则检查位;也就是说,它们区分大小写和重音。..._ci排序规则不区分大小写和重音。 我会把校勘放在WHERE` 只在需要更改排序规则时才使用子句。否则,将其构建到列定义中。

相关问题