免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 13414 | 回复: 6
打印 上一主题 下一主题

PostgreSQL 数据库对象名大小写敏感 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-08-17 10:28 |只看该作者 |倒序浏览
因为刚接触pgsql,这个问题搞晕了。

由于 PostgreSQL 是大小写敏感的,并默认对SQL语句中的数据库对象名称转换为小写,因此如果你在创建数据库对象时指定了大小写混和的对象名称,那么在通过SQL语句访问这些对象时,必须使用双引号(")将数据库对象括起来,以提示 PostgreSQL 不用帮你转换对象名为小写,否则将激发“xxxxx对象不存在”的异常,譬如您的数据库中有名为 TUser 的表,您在 PostgreSQL 自带的图形化查询工具中必须使用类似这样的查询语句才能正确执行:SELECT * FROM "TUser",当然它对 SQL 标准中的保留字和关键字是不区分大小写的,所以写成 select * From "TUser" 这样也是完全可以的。

  另外,PostgreSQL 对数据也是大小写敏感的,这点与 SQLServer 不同(SQLServer 默认是不敏感的),譬如在 TUser 表中有字段 Name,其中有一行 Name 字段值为“Tony Tang”的记录,如果直接使用


SELECT * FROM "TUser" WHERE "Name" LIKE '%tony%';
是查询不到这条记录的,不过你可以这么写:


SELECT * FROM "TUser" WHERE UPPER("Name") LIKE '%TONY%';

  呵呵,是不是觉得这样不太好看,而且担心性能会受影响?幸好 PostgreSQL 提供了关键字 ILIKE 来帮我们解决这个问题,这真是个非常有趣的关键字(I like),对于第一种写法只需要将 LIKE 替换成 ILIKE 就可以了。

最后,建议在编写 SQL 脚本的时候,使用单引号做字符串常量的标识,虽然在 MS SQLServer 中双引号和单引号均可作为字符串常量的标识符,但是在 PostgreSQL 中对此就有严格的功能区分(不能用双引号作为字符串常量的标识符),为了保险起见,建议对所有的数据库对象名均使用双引号(")将其显式约定,以保证大小写的严格匹配。

论坛徽章:
0
2 [报告]
发表于 2006-08-18 11:37 |只看该作者
感谢提出经验之谈~~
PostgreSQL 板块太冷了~~`

论坛徽章:
0
3 [报告]
发表于 2006-08-19 14:06 |只看该作者

回复 1楼 jphd 的帖子

没有啊
我的pg8.1.4装在windows下
用psql操作时,是不区分大小写的啊

论坛徽章:
0
4 [报告]
发表于 2006-08-21 11:03 |只看该作者
是区分大小写的。

论坛徽章:
0
5 [报告]
发表于 2006-08-25 17:00 |只看该作者
redhat linux 9
postgresql 8.1.4
不区分大小写

论坛徽章:
0
6 [报告]
发表于 2006-08-31 18:58 |只看该作者
???

到底是区分还是不区分?

论坛徽章:
0
7 [报告]
发表于 2006-09-01 16:56 |只看该作者
一.对象名:如表名,字段名
数据库内核是区分大小写的。
只是为了方便使用,数据库在分析SQL脚本时,对不加双引号的所有对象名转化为小写字母。
除非你在对象名加上双引号。
所以
1。从建表到应用,要么都加双引号,要么都不要加。
2。如果以上这点做不到,所有的对象名给我写小写字母。

二.数据
区分大小写
假如LIKE '%a%' ,别指望A会出来

[ 本帖最后由 trainee 于 2006-9-1 17:01 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP