mysql - django扩展查询条件`COLLATION`
问题描述
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 方法中扩展这个查询条件吗?
解决方案
ALTER TABLE test DEFAULT COLLATE ...
仅更改“默认值”。也就是说,当您稍后添加一列时,它将获得该排序规则。
反而:
ALTER TABLE test MODIFY xyz ... COLLATE ...
对于您需要更改的每一列。
或者您可以盲目地更改所有 varchar/text 列:
`ALTER TABLE 测试 CONVERT TO CHARACTER SET ... COLLATE ...;
请注意,如果您有,则不能使用索引WHERE name = 'a' COLLATE ...
- 即使您有,它也必须检查所有行INDEX(name)
。
..._bin
排序规则检查位;也就是说,它们区分大小写和重音。 ..._ci
排序规则不区分大小写和重音。
只有当您需要更改排序规则时,我才会将排序规则放在WHERE
子句中。否则,将其构建到列定义中。
推荐阅读
- sql - 在什么情况下 SQL 将使用表的索引
- centos - 最新版本的 CentOS 是否支持 Secure Boot?
- javascript - 如何从 php json_encode 正确解析 Json
- python - PyObject 与 PyTypeObject
- python - 如何找到这个CNN模型(keras)的ROC曲线和AUC分数
- swift - UILabel lineBreakMode 设置为 .ByTruncatingTail 导致 RTL 阿拉伯文本出现错误
- reactjs - 如何在 React 中禁用 event.preventDefault
- python - TypeError:具有不同参数的python多重继承
- amazon-web-services - AWS ECS Fargate 禁用运行状况检查
- java - 如何为 InputText 将 JSON 转换为 Obj