聊聊数据库标识符大小写的问题

聊聊数据库标识符大小写的问题

对于 Oracle 和 PostgreSQL,对象名称区分大小写的行为是不同的。Oracle 名称默认以大写方式存储,不区分大小写。PostgreSQL 名称默认以小写方式存储,区分大小写。

引用标识符也使其区分大小写,而未引用的名称总是转换成小写。例如,标识符FOO、foo和”foo”在PostgreSQL中被认为是相同的,但是”Foo” 和 “FOO”与这三个不同,并且彼此不同。(在PostgreSQL中,将不带引号的名称转换为小写与SQL标准不兼容,SQL标准规定不带引号的名称应转换为大写。因此,根据标准,foo应等同于”FOO”而不是”foo”。如果您想编写可移植应用程序,建议您始终引用某个特定的名称,或者永远不要引用它。)

默认情况下,PostgreSQL 会自动使用小写的对象名称。在大多数情况下,在将原来 Oracle 的对象转换到 PostgreSQL 时,模式、表和列名称存储形式会变更为小写。

若要以大写形式存储对象名称,必须将对象名称放在双引号内。

例如,要在 PostgreSQL 中创建一个名为EMPLOYEES(大写)的表,您应该使用以下形式的语句:

CREATE  TABLE  "EMPLOYEES" (
EMP_ID NUMERIC PRIMARY KEY,
EMP_FULL_NAME VARCHAR(60) NOT NULL,
AVG_SALARY NUMERIC NOT NULL);

以下命令会创建一个名为 employees(小写)的表。

CREATE  TABLE EMPLOYEES (
EMP_ID NUMERIC PRIMARY KEY,
EMP_FULL_NAME VARCHAR(60) NOT NULL,
AVG_SALARY NUMERIC NOT NULL);

如果不使用双引号,PostgreSQL 会以小写形式查找对象名称。对于不使用双引号的CREATE命令,PostgreSQL 会创建具有小写名称的对象。因此,若要创建、查询或操作大写形式(或混合形式)的对象名称,请使用双引号。


原文始发于微信公众号(红石PG):聊聊数据库标识符大小写的问题

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/186460.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!