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()函数,将输入的字符变为一种格式。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值