首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >django扩展查询条件`COLLATION`

django扩展查询条件`COLLATION`
EN

Stack Overflow用户
提问于 2018-08-09 19:45:17
回答 1查看 85关注 0票数 0

django==1.11.9

mysql版本5.6.38

代码语言:javascript
复制
+----------------------+-----------------+
| 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方法中扩展吗?

EN

回答 1

Stack Overflow用户

发布于 2018-08-18 13: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子句中。否则,将其构建到列定义中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51766153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档