gpt4 book ai didi

PostgreSQL 字段名称

转载 作者:行者123 更新时间:2023-11-29 13:34:46 27 4
gpt4 key购买 nike

我现在正在做的项目是将数据库从mysql 升级到Zend 框架中的postgreSQL。我已经通过“ESF 数据库迁移工具包”将数据库迁移到 PostgreSQL。诸如“Emp_FirstName”、“Emp_LastName”等字段名称如何在 PostgreSQL 中存储为“emp_firstname”和“emp_lastname”。这导致代码错误。但是,当我将 PostgreSQL 中的文件更新为 Emp_FirstName 时,它​​显示错误

********** Error **********

ERROR: column "Emp_FirstName" does not exist
SQL state: 42703
Character: 8

是否可以像在 MYSQL 中一样给出文件名?

最佳答案

迁移工具不是“双引号”标识符,因此它们的大小写被 PostgreSQL 扁平化为小写。您的代码必须引用标识符,以便它们保留大小写。 PostgreSQL 区分大小写并且将不带引号的标识符进行大小写扁平化,wheras MySQL is case-insensitive on Windows and Mac and case-sensitive on *nix .

参见 the PostgreSQL manual section on identifiers and keywords有关 PostgreSQL 行为的详细信息。无论如何,您可能应该阅读它,以便了解字符串引号的工作原理。

您需要选择以下选项之一:

  • 更改您的代码以不引用标识符;
  • 更改您的迁移工具以在创建架构时引用标识符;
  • 手动迁移架构而不是使用迁移工具;
  • 手动修复工具生成的 SQL 中标识符的引用;或
  • 小写所有标识符,这样对 Pg 来说无关紧要

当您添加 Oracle 支持并发现 Oracle 大写所有标识符时,最后一个选项将无济于事,因此我建议您选择前四个选项之一。我没有找到一种方法让迁移工具在快速的 30 秒 Google 搜索中引用标识符,但我没有花太多时间在这上面。我会先在迁移工具中寻找控制引用模式的选项。

PostgreSQL 没有配置选项来始终将标识符视为带引号或使用不区分大小写的标识符比较。

这远非您会遇到的唯一不兼容问题,因此请准备好更改查询和应用程序代码。在某些情况下,如果您打算继续支持 MySQL,您甚至可能需要一个针对 MySQL 的查询和另一个针对 PostgreSQL 的查询。

如果您没有使用 sql_mode = ANSI 并且在 MySQL 中使用 STRICT 模式,那么与使用这些选项相比,您在移植时会遇到更多麻烦,因为这两个选项都使 MySQL 更接近 SQL 标准行为。

关于PostgreSQL 字段名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15497273/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com