关于PostgreSQL的自动转换大小写问题及bug修复
测试语句:
table 为test,字段为a_aa/A_AA
测试及结论如下:
create table test("A_AA" char(32));
insert into test values ('111');
select * from test where A_AA='111'; ×
select * from test where "A_AA"='111'; √
报错A_AA不存在
1.创建表时字段名使用大写加双引号,在表中字段名不会出现双引号,但是,此时PostgreSQL使用select查询时,也必须使用大写加双引号(即与数据字段名保持一致)。原因在于,如果不加双引号,PostgreSQL的语句中,字段名会被统一改成小写,大小写不一致将报“a_aa”不存在。
create table test(A_AA char(32));
insert into test values ('111');
select * from test where A_AA='111'; √
select * from test where "A_AA"='111'; ×
2.创建表时字段名使用大写,但是不加双引号,此时PostgreSQL的表中的字段名会转化为小写,select查询时使用大写即可。如果还加双引号,将报“C_BH”不存在。
create table test("a_aa" char(32));
insert into test values ('111');
select * from test where a_aa='111'; √
select * from test where "a_aa"='111'; √
3.创建表时字段名使用小写加双引号,此时PostgreSQL的表中的字段名会去掉双引号,保持为小写,select查询时使用小写即可,加双引号也可以!
create table test(a_aa char(32));
insert into test values ('111');
select * from test where A_AA='111'; √
select * from test where "A_AA"='111'; ×
4.创建表时字段名使用小写也不加双引号,此时PostgreSQL的表中的字段名会去掉双引号,转为小写,select查询时使用小写即可,加双引号也可以!使用大写不加双引号也可以,但是如果使用大写加双引号则会报错。
参考借鉴:https://blog.csdn.net/chenruijia170707/article/details/81195948
在PostgreSQL或Abase类型的数据库中,大小写有一定的坑!
在定义表时,字段名称大小,是否加引号 将产生不一样的结果。
总结:
1,PostgreSQL对表名、字段名都是区分大小写的。但是,PostgreSQL在SQL语句中对大小写是不敏感的,在不加双引号的情况下,创建时无论使用大写还是小写,表中都会统一转为小写显示的,因此查询时也会将语句中的字段名统一改成小写,因此,此时使用大小写查询均可。
2,用SQL语句的时候需要加双引号,或者转义符号。如果要创建名称为大写字母的字段名,需加双引号,此时表中的字段名不含双引号,但是查询时需加上双引号,执行时语句中的双引号将被抹去,因此能查出对应字段。
3,查询执行时,只会发生字段"双引号被抹去"和“大写转小写”中其中一个,优先发生"双引号被抹去"。