哈喽!我是泡泡!又在写代码的路上发现了新知识!
问题描述
以前不经常用navicate,我用navicate写sql的时候发现有的表必须要带上一对双引号才能执行,否则执行就会一直报错,但是有的表就不用;
就很纳闷,一度以为是我的navicate版本问题,或者是因为我的表是外部表导入导致的问题,后来才搞清楚,如果你也有这样的困惑跟我一起看下去吧!
原因分析:
导致这种情况的原因就是数据库默认表名及字段大小写的原因
比如
数据库 | 特性 |
---|---|
PostgreSQL包括greenplum | 是是大小写不敏感的,默认大写字母会自动转为全小写 |
Oracle | 是大小写不敏感的,默认小写字母会自动转为全大写 |
MySQL | MySQL 在 Windows 下不区分大小写,但在 Linux 下默认是区分大小写,可以设置 |
SQL server | 是大小写不敏感的,可以改变设置 |
解决方案:
针对这个问题有如下解决方案(以postgresql为例):
1.比如postgresql数据库,默认小写,如果表名里面含有大写字母,就必须给表名加上双引号才能查出来,否则报错没有这个表,因为系统会自动把表名转化为全小写,就找不到表了;
如这样里面任意地方含有大写字母查询就会报错
select * from Test ;
select * from teSt;
需要加上双引号就不会报错如:
select * from "Test ";
select * from "teSt";
2.改表名,把表名改成默认的大小写,比如postgresql数据库,把表名改成全小写,那查询的时候就不需要用双引号了,如:
select * from test ;
我是泡泡,欢迎点赞,关注!