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

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, 里面插入的数据会有他自己数据库的名字

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

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

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

表大小写的测试

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

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

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

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

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

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

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

分表是

name

Name

NAME

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

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

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

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

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

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

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

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

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

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

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

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

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

可以:

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

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

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

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

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

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