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;
添加条件。
现在我不知道如何在查询集方法中使用它。我在插入数据时通常使用update_or_create()
方法,这将直接导致一些其他形式(带重音(的数据没有插入其中。
这个查询条件可以在 Django 的查询集方法中扩展吗?
ALTER TABLE test DEFAULT COLLATE ...
只更改"默认值"。 也就是说,当您稍后添加列时,它将获得该排序规则。
相反:
您需要更改的每一列的ALTER TABLE test MODIFY xyz ... COLLATE ...
。
或者你可以盲目地更改所有的varchar/text列:
'更改表测试转换为字符集...整理。。。;
请注意,当您有索引时不能使用索引WHERE name = 'a' COLLATE ...
- 即使您有INDEX(name)
,它也必须检查所有行。
..._bin
排序规则检查位;也就是说,它们区分大小写和重音。..._ci
排序规则不区分大小写和重音。
只有当您需要改变排序规则时,我才会将排序规则放在WHERE
子句中。 否则,请将其构建到列定义中。