我试图将一个小的PHP应用程序从MySQL移植到DB2。应用程序通过ADOdb连接到MySQL数据库。我通过ADOdb成功连接了DB2数据库,但是我并没有如此成功地执行SQL查询。需要修改查询以包含引用(“”)标记以执行表名。他们在ADOdb中的任何解决方法是什么?修改每个查询(实际上首先破坏了使用ADOdb的目的)有点繁琐。通过ADOdb将MySQL转换为DB2 PHP
谢谢!
我试图将一个小的PHP应用程序从MySQL移植到DB2。应用程序通过ADOdb连接到MySQL数据库。我通过ADOdb成功连接了DB2数据库,但是我并没有如此成功地执行SQL查询。需要修改查询以包含引用(“”)标记以执行表名。他们在ADOdb中的任何解决方法是什么?修改每个查询(实际上首先破坏了使用ADOdb的目的)有点繁琐。通过ADOdb将MySQL转换为DB2 PHP
谢谢!
在DB2中,默认情况下,架构,表和列名不区分大小写。当您发出声明:
create table myid.test (
c1 int
c2 int
);
DB2折叠架构,表和列名称为大写字母。因此,如果您查看系统目录,则会看到该表称为MYID.TEST,并具有列C1和C2。
DB2折叠所有查询到上壳体以及(默认)。所以,当你查询这个表,下面的语句是相同的:
select c1, c2 from myid.test
SELECT C1, c2 from MYID.TEST
SELECT c1, C2 from MyID.Test
然而,DB2 可以使用大小写敏感名:如果你引用的架构/表/列名的定义,那么DB2将使用精确匹配:
create table "MyID"."Test" (
c1 int,
"C2" int
);
在这种情况下,您将在系统目录中看到混合大小写的架构/表/列名称。
这是要求您在您所有的疑问,DML和DDL的引用您的模式/表/列名的不幸(痛苦)的副作用。
使用大小写混合的名字是不是最好的做法。
最好的解决办法是重新创建表,而不区分大小写的名称(即不要把模式/表/列名在引号。
这将消除您的需要压倒一切与ADODB。ADODB可能有一些解决方法,但其他任何人都会遇到麻烦。
这有点乏味修改每个 查询(实际上击败在第一 代替使用ADOdb中的 目的)。
虽然它肯定可能很乏味,但你必须这样做。 JDBC在Java中提供了等效的功能,并且您必须编写特定于特定数据库的SQL。这只是它如何与数据库开发一起工作。除非你使用像Hibernate(Java ORM)这样的抽象层来隐藏你的SQL特性,否则你必须调整它以在不同的数据库上运行。
很高兴,到目前为止,您所遇到的唯一的事情是添加一些引号。在将复杂的查询从一台服务器转换为另一台服务器时,人们经常最终不得不重写大部分查询。