2011-04-20 53 views
3

我试图将一个小的PHP应用程序从MySQL移植到DB2。应用程序通过ADOdb连接到MySQL数据库。我通过ADOdb成功连接了DB2数据库,但是我并没有如此成功地执行SQ​​L查询。需要修改查询以包含引用(“”)标记以执行表名。他们在ADOdb中的任何解决方法是什么?修改每个查询(实际上首先破坏了使用ADOdb的目的)有点繁琐。通过ADOdb将MySQL转换为DB2 PHP

谢谢!

回答

2

在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可能有一些解决方法,但其他任何人都会遇到麻烦。

0

这有点乏味修改每个 查询(实际上击败在第一 代替使用ADOdb中的 目的)。

虽然它肯定可能很乏味,但你必须这样做。 JDBC在Java中提供了等效的功能,并且您必须编写特定于特定数据库的SQL。这只是它如何与数据库开发一起工作。除非你使用像Hibernate(Java ORM)这样的抽象层来隐藏你的SQL特性,否则你必须调整它以在不同的数据库上运行。

很高兴,到目前为止,您所遇到的唯一的事情是添加一些引号。在将复杂的查询从一台服务器转换为另一台服务器时,人们经常最终不得不重写大部分查询。