psotgresql之大小写
网址:http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=812899
由于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来帮我们解决这个问题,这真是个非常有趣的关键字(Ilike),对于第一种写法只需要将 LIKE 替换成ILIKE 就可以了。
最后,建议在编写 sql脚本的时候,使用单引号做字符串常量的标识,虽然在 MS sqlServer 中双引号和单引号均可作为字符串常量的标识符,但是在 Postgresql 中对此就有严格的功能区分(不能用双引号作为字符串常量的标识符),为了保险起见,建议对所有的数据库对象名均使用双引号(")将其显式约定,以保证大小写的严格匹配。
评论:
一.对象名:如表名,字段名
数据库内核是区分大小写的。
只是为了方便使用,数据库在分析sql脚本时,对不加双引号的所有对象名转化为小写字母。
除非你在对象名加上双引号。
所以
1。从建表到应用,要么都加双引号,要么都不要加。
2。如果以上这点做不到,所有的对象名给我写小写字母。
二.数据
区分大小写
假如LIKE '%a%',别指望A会出来
框中内容来自《省略Postgresql的sql语句中的双引号》
内容来自:http://blog.sina.com.cn/s/blog_4fb490ff01012g5f.html
标准的sql是不区分大小写的。但是Postgresql对于数据库中对象的名字允许使用支持大小写区分的定义和引用方法。方式就是在DDL中用双引号把希望支持大小的对象名括起来。比如希望创建一个叫AAA的表。如果用CREATE TABLE AAA (...);的话,创建出来的表实际上是aaa。如果希望创建大写的AAa表的话,就需要用CREATE TABLE "AAA"(...);这种双引号的方式定义对象名。这样写的缺点是查询语句必须也使用双引号的方式引用对象名。比如SELECT* FROM "AAA";否则Postgresql缺省会去找aaa这个对象,然后返回aaa不存在的错误。需要注意的是不仅仅是表可以这样定义和引用,对Postgresql中的任意对象(比如列名,索引名等)都有效。
实际上传统的sql都是不区分大小写的,所以只要DDL和DLL按照传统(不使用双引号)的方式操作数据库对象不会有任何问题。问题出在如果表是通过Postgresql的pgAdmin III 工具创建的话,缺省是按照有双引号的方式创建对象的,所以DLL里面必须也要按照有双引号的方式使用。但是这种写法不是标准的,如果是通过一些通用库函数访问数据库的话,会不被支持。
建议:
1.不推荐使用pgAdmin III这个工具创建数据库对象。还是应该手工编写DDL语句。
2.不推荐在DDL里用双引号的方式创建区分大小写的对象。
3.Postgresql给出的建议是sql的key word用大写,其他的名称全部使用小写。
个人操作时遇到的问题:
用sql Shell(psql)通过用户postgres登录Postgresql,创建用户Administrator,
postgres=#create user Administrator
结果如下图所示:
可以知道:
由于Postgresql 是大小写敏感的,并默认对sql语句中的数据库对象名称转换为小写。
所以
加双引号(“)后就可以创建用户Administrator,若不加则创建的用户为administrator。
将Postgresql文件夹bin路径添加到系统环境中后重启生效.
通过windows下dos创建postgresql用户是区分大小写的。
在dos下操作,通过createuser –Uolduser –P newuser来创建。
比如我们想创建postgresql数据库用户Administrator。
>createuser –U postgre –P Administrator
这样创建的数据库用户Administrator没有创建数据库的权利,可以通过pgAdmin III登录进行查看。
>createuser –U postgre –s Administrator
这样具有创建数据库能力。