PostgreSQL 库,表,字段,值大小写的问题

群里,经常看到一些学友们,对PostgreSQL 的大小写问题有疑惑,本着自己也敢兴趣的原则,并且也想弄清楚这件事情,这里的做点功课。

需要测试的内容如下

1 数据库大小写

2 表名大小写

3 字段大小写

4 字段值得大小写

一些相关的大小写的函数以及数据的转换函数

let's go

1 数据库名的大小写

首先会建立三个数据库名字为

1 Test

create table good (name varchar(20));

insert into good (name) values ('Test');

2 test

create table good (name varchar(20));

insert into good (name) values ('test');

3 TEST

create table good (name varchar(20));

insert into good (name) values ('TEST');

然后在这三个数据库里面,都建立一个表,good, 里面插入的数据会有他自己数据库的名字

我们来对这些数据库的表进行访问

通过以上测试,可以得出,数据库的库名是大小写是敏感的,所以在建库的时候,需要注意大小写的问题。

表大小写的测试

我们在test 库中,建立三个表,BIG,big, Big 三个表

在你试着创建第一张表的时候,没有报错,但你在建立第二张表的时候,就开始报错了,我们可以看到test 数据库中只有一张叫big的表,有人说,那不对我要是先建立 BIG 表呢?(你可以试试,结果是一样的,postgresql 在一个数据库中只能运行小写表名的存在)

当然如果你非要存储不同大小写的表名,PostgreSQL 也不是不可以,那就是需要加“” 双引号

最后我们来尝试一下字段名和字段值的问题

我们还是在test 数据库里面建立表,并且会在这个表里面建立三个字段

分表是

name

Name

NAME

并且在每个字段里面的值,也是和字段名的撰写方式一样。我们来看一下结果。

在做到下面的时候,大家应该看到这个错误, 在一个表里面,的字段名也默认统一为小写。当然如果你不喜欢,还是可以建立你想建立的字段名大小写,还是那样加“双引号”。

既然如此,我们只能继续在字段的值的上面找问题了

我们在一个表中的name 字段,插入不同的值, TIM, tim, Tim 三个值,我们看看结果如何,并且在查询中是不是会有什么问题?

好了数据已经生成了,看看有些人在群里面提出的问题,是不是真的

看到上面的结果,验证了群里面有人提出的问题的真实性,的确不同的大小写值,会在查询里面有问题。

抱怨的声音就由此而发,其中有的人就说,我们那些前端根本就不管大小写的问题,我们后端怎么去写SQL 语句去查这些数据。

其实So Easy 我们来将问题化整为零

1 输入数据不规范,里面大小写都有,但查询的时候,给出的条件是小写,请问是否可以将大写,大小写都有的记录查出来。

可以:

只需要这样就可以,详见下图,其实我到是觉得这个是POSTGRESQL 比别的数据库强的地方,很严谨,但如果需要宽松也是支持的。

另外这个事情我个人觉得,不能将所有的事情都推到后端,前端该做的验证,该做的检测,和过滤,不能讲这个工作转移到后端。

但又的同学说,没有办法,公司就是这样,那我们该怎么办

方法是有的,例如以生成的订单号为例,他必须是唯一的,但如果客户输入的时候,有的大写,有的小写,那岂不是要出现两个订单号了。

建议可以在输入订单号的后端加入 lower() upper()函数,将输入的字符变为一种格式。

本文分享自微信公众号 - AustinDatabases(AustinDatabases)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-06-11

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏编程坑太多

『互联网架构』软件架构-Sharding-Sphere分库分表(66)

水平拆分的数据库(表)的相同逻辑和数据结构表的总称。例:订单数据根据主键尾数拆分为10张表,分别是torder0到torder9,他们的逻辑表名为t_order...

22480
来自专栏魔王卷子的专栏

django 报错:Error loading MySQLdb module:No module named 'MySQLdb'

我通过查阅文档,说python3需要安装的包已经不是MySQLdb了,而是mysqlclient。那我们就安装这个包了。

48240
来自专栏IT技术精选文摘

为什么使用消息队列?消息队列有什么优点和缺点?

其实就是问问你消息队列都有哪些使用场景,然后你项目里具体是什么场景,说说你在这个场景里用消息队列是什么?

49330
来自专栏腾讯云数据库(TencentDB)

【迪B课堂】MySQL表空间碎片产生原因和优化

点击上方蓝字每天学习数据库 【迪B课堂】为腾讯云数据库产品经理迪B哥开设的面向数据库开发者、数据库运维人员、云端运维人员的系列培训课程,旨在帮助大家从入门到精...

17040
来自专栏Devops专栏

influxDB 常用操作

在influxDB的CLI界面执行precision rfc3339即可,但是显示是UTC的时区,与中国时区差了8个小时,需要在查询语句的最后加上tz('Asi...

47350
来自专栏芋道源码1024

SpringBoot + MyBatis + MySQL 读写分离实战

读写分离要做的事情就是对于一条SQL该选择哪个数据库去执行,至于谁来做选择数据库这件事儿,无非两个,要么中间件帮我们做,要么程序自己做。因此,一般来讲,读写分离...

15770
来自专栏编程坑太多

『互联网架构』软件架构-mysql终级解决方案分库分表(65)

举例:一个用户表有很多的属性,关联了很多数据,如果放到同一个表里面的话查询是方便了,但是效率不行。

15950
来自专栏移动开发面面观

Spring-boot的jdbc简单实践

Spring-boot 中为我们提供了一套非常简单易用的开发框架,本文将记录Spring-boot 中如何连接MySql。由于笔者是第一次接触后端开发,如有问题...

9330
来自专栏程序生活

大数据入门与实战-SQL基础教程

8830
来自专栏EAWorld

老焦专栏 | 为什么需要用业务补偿服务和TCC 型服务实现数据一致性

分布式事务解决的问题很明确,就是在服务分布在不同进程、数据分布在不同数据库时,如何解决数据一致性问题。对于这个问题,业界的共识是不要启用数据库 XA 模式,因为...

10630

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励