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方法中扩展吗?
发布于 2018-08-18 05:30:21
ALTER TABLE test DEFAULT COLLATE ...
仅更改“默认值”。也就是说,当您稍后添加一个列时,它将获得该排序规则。
而是:
对于需要更改的每一列,均为ALTER TABLE test MODIFY xyz ... COLLATE ...
。
或者您可以盲目地更改所有varchar/text列:
` `ALTER测试转换为字符集...整理...;
注意,当您使用WHERE name = 'a' COLLATE ...
时,不能使用任何索引--即使您使用INDEX(name)
,它也必须检查所有行。
..._bin
排序规则检查位,即区分大小写和重音。..._ci
排序规则不区分大小写和重音。
只有当您需要更改排序规则时,我才会将排序规则放在WHERE
子句中。否则,将其构建到列定义中。
https://stackoverflow.com/questions/51766153
复制