Django + MySQL 查询不区分大小写问题

Django + MySQL 查询不区分大小写问题

Posted May 29, 2018

最近发现一个现象是测试环境的 sqlite 是可以区分大小写的。

就是说

Python

# sqlite 环境
>>> Company.objects.filter(name='Teambition')
<QuerySet [<Company: Teambition>]>


>>> Company.objects.filter(name='teambition')
<QuerySet [<Company: teambition>]>

而到了线上的 MySQL 就不区分大小写了。

Python

# MySQL 环境
>>> Company.objects.filter(name='teambition')
[<QuerySet [<Company: Teambition>]>, <QuerySet [<Company: teambition>]>]

获得到两个实例。 但这样不是我预想的。

起初我查询了官方文档, 得到指引使用__exact方法. 即:

Python

Company.objects.filter(name__exact='teambition')

但是无效!!!

由于测试环境的 sqlite 没有问题, 所以怀疑在 mysql 的配置上面。 原来是字符集校对规则的问题, utf8_general_ci 不区分大小写, 可以改成utf8_bin(将字符串中的每一个字符用二进制数据存储,区分大小写。) 或者 utf8_general_cs(cs为case sensitive的缩写,即大小写敏感).

但是, 由于我程序段没有操作数据库的权限, 所以没有去 alter 已经有的 TABLE。 我找到另外的一种解决方式

通过 DJANGO ORM 的extra, 在匹配语句上面加上BINARY来区分大小写.

Python

if settings.ENV == 'prod':
    # 线上的 MySQL 数据库加上 binary
    app = Company.objects.extra(where=['binary name=%s'], params=[options['app'],]).first()
else:
    # Sqlite 不做处理
    app = Company.objects.filter(name=options['app']).first()

参考:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏JavaQ

细说MySQL区分字母大小写

在Linux系统上使用MySQL,MySQL是区分字母大小写的,例如建A表时表名是大写的A,修改A表时脚本里写的a,就会报错表a不存在。在MySQL中,数据库对...

37750
来自专栏玩转JavaEE

elasticsearch API约定(一)

前面我们介绍了一些REST API的基本用法,使读者对API的使用有了一个直观的了解,本文我们来介绍下Elasticsearch中的API约定,这些约定适用于大...

24930
来自专栏鸿的学习笔记

读会搜索引擎

搜索引擎一般由索引管理器,索引检索器,索引构建器,文档管理器组成。 索引管理器,顾名思义是管理带有索引结构的数据,负责对索引的访问。那么索引是怎么管理的呢?不...

19410
来自专栏大数据和云计算技术

MonetDB学习笔记

这个文章是我2013年6月写在博客里面的,翻出来挺有意思,MonetDB有很多技术值得学习。 1 架构: 三层软件架构: SQL front-end:前端SQL...

626110
来自专栏hadoop学习笔记

配置Hanlp自然语言处理进阶

中文分词中有众多分词工具,如结巴、hanlp、盘古分词器、庖丁解牛分词等;其中庖丁解牛分词仅仅支持java,分词是HanLP最基础的功能,HanLP实现了许多种...

13430
来自专栏黑泽君的专栏

day30_Hibernate复习_02(补刀)

对象的三种状态:     瞬时态:对象刚刚创建,没有与session关联,没有ID     持久态:已经和Session关联,有ID     游离...

7120
来自专栏解Bug之路

MySQL多版本并发控制机制(MVCC)-源码浅析 顶

作为一个数据库爱好者,自己动手写过简单的SQL解析器以及存储引擎,但感觉还是不够过瘾。<<事务处理-概念与技术>>诚然讲的非常透彻,但只能提纲挈领,不能让你玩转...

20020
来自专栏xingoo, 一个梦想做发明家的程序员

基于ELK的数据分析实践——满满的干货送给你

很多人刚刚接触ELK都不知道如何使用它们来做分析,经常会碰到下面的问题: 安装完ELK不知从哪下手 拿到数据样本不知道怎么分解数据 导入到elastics...

47970
来自专栏java学习

Hibernate学习笔记2

定义hbm.xml映射文件和pojo类时都需要定义主键,Hibernate中定义的主键类型包括:自然主键和代理主键:

11340
来自专栏天天

Ajax(20171102)

8830

扫码关注云+社区

领取腾讯云代金券