PostgreSQL 与大小写的“坑”。
其实每种数据库都有自己的特色,PostgreSQL 也不例外,其中如果你留心PostgreSQL被最常问及的问题之一,就是大小写的问题。今天的讨论不涉及数据库名,表名的大小写,仅仅讨论一下字段里面的值的大小写。
我们以一个例子为开始,
1 我们创建一个表
create table Case_insensitive
( id serial not null primary key,
address varchar(50),
comment text);
2 将数据库输入到里面
insert into case_insensitive (address,comment) values ("Person1@em.com","Thanks for your help!!");
insert into case_insensitive (address,comment) values ("TaTk@bb.com","I hate it");
insert into case_insensitive (address,comment) values ("ttKbb@cc.com","Sorry I am understanding now, little slowly");
那么大小写的问题在哪里?我们来查询一个数据大致你就会理解
从图中你可以清晰的看到,发生的问题在哪里,如果你的字段里面的值是包含英文大小写的情况下,你必须是要进行细致一致的大小写匹配才能找到相关的值。
而按照中国的人的思维方式,或者说用惯了其他主流数据库的情况下这样的必须匹配性的输入对中国人来说,是不友好的。
虽然题目中提到了"坑", 但实际上来说,这不是一个坑,或者严谨的来说,PostgreSQL这样的方式才应该是正确的。而很多时候先入为主,来判断POSTGRESQL 在这方面是有坑的,这并不公平。
那如何来解决这个世俗认为postgresql 应该和其他数据库一样使用习惯的方式问题。下面就要来说一说。
方法:1
统一规则:
我们将我们查询的字段,和需要查询的数据统一变成小写,通过 lower 这个函数来进行统一的转换。
从上图可以看出,我们可以将数据在输入纯小写的情况下,将数据查出。
问题又来了,这样的情况下能走索引吗?
答案是当然不能,函数的计算在条件左边的情况下大部分数据库都是不能走索引的,oracle 当然有类似的功能,能让一部分这样的情况走索引。PG 可以吗,当然,对标的就是ORACLE ,当然也可以当函数计算在左边的情况下,继续走索引。
怎么做???
变换思路,我们将索引的里面的字符都变小就可以了,看下图。
当然后面执行计划还未走索引得原因是数据量只有三条,不足以支撑走索引的cost.
那处理这样情况的方法到此为止了? no no no 我们还有其他的方法供您选择。
2 有一种情况是,这一列例如是邮件地址,如果是邮件地址的情况下,是具有一种性质的,就是数据的唯一性。那如果 (请看图)
如果出现图中的情况,这可是不大美好的一件事情。如何来进行邮件地址的唯一性检查。我们可以提前为这列,建立一个唯一索引。
有了这样的索引大小写不一致的情况输入同样的字符就可以被管制了
当然如果这些你还有疑问,看看是不是还有其他的方法来对这样的事情进行处理。回答是YES
3 使用ilike
通过使用ilike的查询方式来查询大小写敏感的问题。
其实如果有规划的情况下,可以通过在输入时候的大小写输入的转换在insert 这个阶段就将问题处理清楚,并且辅助于一些约束。这样问题就比较好解决。
品略图书馆 http://www.pinlue.com/
PostgreSQL 与大小写的“坑”。相关推荐
- .NET+PostgreSQL实践与避坑指南
简介 .NET+PostgreSQL(简称PG)这个组合我已经用了蛮长的一段时间,感觉还是挺不错的.不过大多数人说起.NET平台,还是会想起跟它"原汁原味"配套的Microsoft ...
- git提交文件名大小写的坑 如何填
git默认是大小写不敏感的!!! 发现问题:我的git是集成在IDE中的,使用过程中类名是使用驼峰命名法来命名, 发现有一个字母没有大写,遂重命名文件,编辑完之后,本地环境测试好好地,然后提交到测试环 ...
- git不区分文件名大小写这种坑当然要跳出来
关于遇到git提交文件名称不区分大小写这事儿就是个坑 java类名和和文件名不一致在IDEA里明明改好了,等从git上clone下来就是不对也是纠结了我好一阵子: 所以这时大概只好用 --force了 ...
- PostgreSQL安装遇到的坑:Problem running post-install step/password authentication failed for user postgres
第一个问题: 安装过程中提示:Problem running post-install step. Installation may not complete correctly. The datab ...
- 数据库中表名、字段名、字符串大小写处理规则
测试数据: CREATE TABLE `test` (`name` varchar(30)); insert into test values('abc'); insert into test val ...
- PostgreSQL大小敏感问题
PostgreSQL之大小敏感问题 背景 以前看过postgresql的书说是 大小写敏感,觉得自己注意应该也不是啥事.最近用postgresql数据库,由于之前用 orcle 数据库习惯的命名习惯, ...
- 记一次Kali linux安装OpenVAS失败的入坑日记
一,前景: 由于本人心血来潮想去研究openvas的使用,所以在以一个"绿骨"小白的身份来使用该工具.毫无疑问,小白上阵,必定掉坑!刚拿到全新的Kali linux就发现,这玩意是 ...
- python开发出来的crm系统_用Python打造一个CRM系统(三)
在上一篇中我们基于cookiecutter-django创建了一个one_crm的项目,在本文中将在本地进行初始化,并成功运行起来. 本地初始化之前先确保环境先安装了Python3.8.Postgre ...
- WSL2迁移与硬盘读写测试
文章目录 前言 WSL2迁移 Linux硬盘读写测试 更改Terminal中WSL2的默认启动目录 参考 前言 上篇 WSL2内核编译_添加SocketCAN支持提到解压过程文件名大小写的坑和/mnt ...
最新文章
- Process Monitor中文手册
- 实验五 编写、调试具有多个段的程序
- 7_CentOS下安装和卸载AdobeReader
- CPU究竟是如何执行任务的?
- python编写鸡兔同笼程序设计_Python少儿编程:鸡兔同笼,涨知识了
- python一次读取10行_Python怎么读取Excel的行数和列数?
- 【转】移动前端工作的那些事---前端制作篇之框架篇--jqMobi框架
- ISO15693协议RFID读卡器模块HX829的韦根66(WG66)通信协议说明
- 2021年CKA考试真题(二)
- 人大金仓安装教程(windows)
- ctf GetFlag
- SLAM前端之ndt_omp使用
- 清华大学鲍橒计算机1999,《最强大脑》鲍橒:世界盲棋第一人的最强记忆
- 语句摘抄——第20周
- 修改sim卡号码 android,android 如何动态修改SIM卡应用名称 MT6572 MT6589
- Matlab2018b新特性介绍以及R2018b+waijung blockst 百度云下载链接
- 弹出Windows10的虚拟键盘总结
- 构筑自有流量池,电商宝SCRM(微信公众号和个人号管家)助力企业打赢粉丝争夺战...
- 《克隆人的进攻》面向对象Java版
- 基于OpenSSL 1.1.1版实现的SM2签名与验签C程序