MySQL для DB2 через ADOdb PHP - PullRequest
       22

MySQL для DB2 через ADOdb PHP

3 голосов
/ 20 апреля 2011

Я пытаюсь перенести небольшое приложение PHP на DB2 из MySQL.Приложение подключается к базе данных MySQL через ADOdb.Я успешно подключился к базе данных DB2 через ADOdb, но мне не удалось выполнить запросы SQL.Запросы необходимо изменить, чтобы включить кавычки ("") вокруг имен таблиц для выполнения.Есть ли какой-нибудь обходной путь в ADOdb для этого?Немного утомительно модифицировать каждый запрос (который на самом деле отрицает цель использования ADOdb).

Спасибо!

Ответы [ 2 ]

2 голосов
/ 20 апреля 2011

В 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 голосов
/ 20 апреля 2011

Немного утомительно модифицировать каждый запрос (который на самом деле побеждает Цель использования ADOdb в первом место).

Хотя это, конечно, может быть утомительно, вам придется это сделать. JDBC обеспечивает эквивалентную функциональность в Java, и там вы должны написать SQL, специфичный для вашей конкретной базы данных. Вот как это работает с разработкой базы данных. Если вы не используете какой-либо уровень абстракции, такой как Hibernate (Java ORM), чтобы скрыть от вас специфику SQL, вам придется настроить его для запуска в другой базе данных.

Радуйтесь, что до сих пор вы сталкивались только с несколькими кавычками. Людям часто приходится переписывать большую часть запроса при преобразовании сложного запроса с одного сервера на другой.

...