MySQL 5到PostgreSQL 8.4,区分大小写的约定,我应该将其保留在PostgreSQL中吗

MySQL 5到PostgreSQL 8.4,区分大小写的约定,我应该将其保留在PostgreSQL中吗,postgresql,naming-conventions,Postgresql,Naming Conventions,现在在我的公司,我们正在从MySQL 5切换到PostgreSQL 8.4,因为项目的前端是PHP,但服务器部分是LISP,它与MySQL准备的语句有问题 这只是原因之一,我无法控制,长话短说,目前我们有一个数据库,其中只有十几个表需要迁移。在MySQL中,我们使用了一种区分大小写的sql约定,如下所示: 所有表格都是复数形式,所有列的前缀都是表名,而不是复数形式,单词之间用大写字母分隔,如下所示: 表Posts、列posted、UserID、PostTitle、PostContent、Post

现在在我的公司,我们正在从MySQL 5切换到PostgreSQL 8.4,因为项目的前端是PHP,但服务器部分是LISP,它与MySQL准备的语句有问题

这只是原因之一,我无法控制,长话短说,目前我们有一个数据库,其中只有十几个表需要迁移。在MySQL中,我们使用了一种区分大小写的sql约定,如下所示:

所有表格都是复数形式,所有列的前缀都是表名,而不是复数形式,单词之间用大写字母分隔,如下所示: 表Posts、列posted、UserID、PostTitle、PostContent、PostUpdated、PostCreated等

虽然我在前端使用了PHP PDO,但是有很多查询都是这样的:SELECT*FROM POST在MySQL中运行得很好,但在PostgreSQL中,它们必须是SELECT*FROM POST,或者迁移后的表在PostgreSQL中应该是小写的,然后它会考虑双引号


这两种解决方案都很糟糕,所以我很乐意使用第三种解决方案,比如找到一种能够像以前一样继续查询表的方法,并且它仍然可以在PostgreSQL或其他什么程序中工作。但如果这不可能,我希望能从这里得到一个建议-例如,继续创建区分大小写的表,并在表和列名周围使用双引号查询数据库,更改当前查询或将命名约定更改为小写,并开始使用下划线作为单词之间的分隔符,如post_title,发布内容并修改所有当前查询。从长远来看,最重要的是做得更好,因为这将是项目增长的最后一次这样的改变

从长远来看,如果使用小写和下划线,你会少很多挫折感。SQL规范说,如果不引用标识符,它将被折叠为大写。PostgreSQL可以做到这一点,但为了可读性,它使用小写。然而,一旦开始引用混合大小写标识符,就必须继续这样做


注意,您可以在语句中使用不带引号的混合大小写标识符来命中数据库中的所有小写标识符。也就是说,可以使用select*from table_name(从表格名称中选择*)点击包含表格名称的数据库,该数据库将折叠为所有小写。

从长远来看,如果使用所有小写和下划线,您会少很多挫折感。SQL规范说,如果不引用标识符,它将被折叠为大写。PostgreSQL可以做到这一点,但为了可读性,它使用小写。然而,一旦开始引用混合大小写标识符,就必须继续这样做


注意,您可以在语句中使用不带引号的混合大小写标识符来命中数据库中的所有小写标识符。也就是说,可以使用select*from table_name(从表格名称中选择*)点击包含表格名称的数据库,该数据库将折叠为所有小写。

您是如何在PostgreSQL中创建表格的?您是否偶然引用了表名和列名?为了澄清@mu的说法:如果您创建表时没有引用表名,PostgreSQL应该自动对表名执行不区分大小写的查找。如果您创建了表并引用了标识符(例如MyTable),则PostgreSQL将对表名执行区分大小写的文字匹配。不要引用标识符。您是如何在PostgreSQL中创建表的?您是否偶然引用了表名和列名?为了澄清@mu的说法:如果您创建表时没有引用表名,PostgreSQL应该自动对表名执行不区分大小写的查找。如果您创建了表并引用了标识符(例如MyTable),则PostgreSQL将对表名执行区分大小写的文字匹配。不要引用标识符。这是一个很好的建议,因为它应该适用于所有基于SQL的数据库系统,以备以后需要。看看SQL Server是如何引用的,这是尝试养成不需要SQL引用的习惯的一个很好的理由;谢谢你的建议。我知道如果我使用小写,我可以键入混合大小写,但我感到困惑,希望当表/列是混合大小写时,我不能在不使用任何大小写的情况下查询它们。这是一个很好的建议,因为它应该适用于所有基于SQL的数据库系统,以防以后需要它。看看SQL Server是如何引用的,这是尝试养成不需要SQL引用的习惯的一个很好的理由;谢谢你的建议。我知道如果我使用小写,我可以键入混合大小写,但我感到困惑,希望当表/列是混合大小写时,我不能在不使用任何大小写的情况下查询它们。