框中内容来自《PostgreSQL数据库对象名大小写敏感》

网址: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用大写,其他的名称全部使用小写。

个人操作时遇到的问题:

  • 在PostgreSQL中创建用户

用SQL Shell(psql)通过用户postgres登录PostgreSQL,创建用户Administrator,

postgres=#create user Administrator

结果如下图所示:

可以知道:

由于PostgreSQL 是大小写敏感的,并默认对SQL语句中的数据库对象名称转换为小写。

所以

如果你在创建数据库对象时指定了大小写混和的对象名称,那么在通过SQL语句访问这些对象时,必须使用双引号(")将数据库对象括起来,以提示 PostgreSQL 不用帮你转换对象名为小写。

加双引号(“)后就可以创建用户Administrator,若不加则创建的用户为administrator。

  • 通过windows下dos创建postgresql用户

将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

这样具有创建数据库能力。

psotgresql之大小写的更多相关文章

  1. 将现有MySQL数据库改为大小写不敏感

    用过MySQL的应该都会注意到,默认情况下,Linux下安装的MySQL是大小写敏感的,也就是说Table1和table1可以同时存在.而Windows下的MySQL却是大小写不敏感的,所有表名和数据 ...

  2. js 处理字母 大小写的 一些函数

    js中实现字母大小写转换主要用到了四个js函数: 1.toLocaleUpperCase2.toUpperCase3.toLocaleLowerCase4.toLowerCase 下面就这四个实现大小 ...

  3. Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)

    去空格及特殊符号 s.strip().lstrip().rstrip(',') 复制字符串 #strcpy(sStr1,sStr2) sStr1 = 'strcpy' sStr2 = sStr1 sS ...

  4. html中定义标签字母的大小写

    定义和用法: text-transform 属性控制文本的大小写. 值和属性: 值 描述 none 默认.定义带有小写字母和大写字母的标准的文本. capitalize 文本中的每个单词以大写字母开头 ...

  5. 大小写互换-"数字字符串"转换成数字

    今天穿着hacker浑浊马甲在百度编程课堂实训习题中发现了这个很简单的问题,就做了下. 为了考虑输入的是否是数字,结果写好后竟然超时了. 不过里面用到的将字符串装换成数字的方法,感觉是个收获,因此在此 ...

  6. git提交时支持文件名大小写的修改

    在windows环境下,git提交文件时,默认对文件名大小写不敏感,若修改了文件名字的大小写,可能会导致提交时没有记录,文件名修改不成功.网上搜集了几种解决方法,现总结下: 1. 修改git conf ...

  7. MySQL大小写补坑记

    背景:由于项目开始时数据库设计经验不足,数据库名和部分数据表名都含有大写字母.但问题是,Linux上数据库名和表名是区分大小写的,而Windows上是不区分大小写的.结果就是在看本地的数据库的时候,对 ...

  8. iOS改变字母的大小写

    使用lowercaseString,uppercaseString -(void)test{ NSString * str = @"person"; NSString * str1 ...

  9. 为了防止采集,把文章中出现的URL链接随机大小写(PHP实现)

    <?php $string = "http://www.kxblogs.com/n/20161115/74439155.html"; $string = explode('/ ...

随机推荐

  1. vue-cli3.0 升级记录

    年三十时 vue2.6 发布,向 3.0 看齐,说明 3.0 不远了.作为开发者也应该为vue3.0 做点准备.首先是把 vue-cli 升级到 3.x ,在这记录下 vue-cli2.x 升级 vu ...

  2. UIAutomatorViewer增加xpath查看

    原来的UIAutomatorViewer是没有xpath查看路径的,下载如下jar包: https://pan.baidu.com/s/1jpr6m0OOce7CtnDE_lIJ9A 密码:cja0 ...

  3. c++11并行、并发与多线程编程

    首先,我们先理解并发和并行的区别. 你吃饭吃到一半,电话来了,你一直到吃完了以后才去接,这就说明你不支持并发也不支持并行. 你吃饭吃到一半,电话来了,你停了下来接了电话,接完后继续吃饭,这说明你支持并 ...

  4. 微信小程序treeview

    这是昨晚加班的时候,用微信小程序写的一个treeview组件. 先来看看效果图吧! 比较简单吧,直接view布局. 移动端实现treeview类似的效果,有大的局限性.首先受设备宽度的影响,如果像PC ...

  5. Android 系统服务

    模拟器版本 Android 4.1.2 - API Level 16 CMD 下输入:adb shell service list   服务名 对象 0 phone com.android.inter ...

  6. Linux 常用命令 | mkdir/rmdir/touch 的使用

    一.创建空目录 命令:mkdir 原意:make directories 所在路径: /bin/mkdir 1.创建空目录 ​ 2.递归创建空目录 选项:-p 如果直接使用mkdir 创建空目录: W ...

  7. SQL 必知必会·笔记<3>过滤数据

    在同时使用ORDER BY 和WHERE 子句时,应该让ORDER BY 位于 WHERE 之后,否则将会产生错误 WHERE子句操作符 范围值检查 使用BETWEEN 操作符,示例: SELECT ...

  8. Java的赋值、浅克隆和深度克隆的区别

    赋值 直接  = ,克隆 clone 假如说你想复制一个简单变量.很简单: int a= 5; int b= a; b = 6; 这样 a == 5, b == 6 不仅仅是int类型,其它七种原始数 ...

  9. leetcode — valid-parentheses

    import java.util.Stack; /** * Source : https://oj.leetcode.com/problems/valid-parentheses/ * * Creat ...

  10. Mysql 5.7 基于组复制(MySQL Group Replication) - 运维小结

    之前介绍了Mysq主从同步的异步复制(默认模式).半同步复制.基于GTID复制.基于组提交和并行复制 (解决同步延迟),下面简单说下Mysql基于组复制(MySQL Group Replication ...