2011-04-20 2 views
3

작은 PHP 애플리케이션을 MySQL에서 DB2로 이식하려고합니다. 애플리케이션은 ADOdb를 통해 MySQL 데이터베이스에 연결됩니다. ADOdb를 통해 DB2 데이터베이스에 성공적으로 연결되었지만 SQL 쿼리를 성공적으로 실행하지 못했습니다. 실행할 테이블 이름을 따옴표 ("")가 포함되도록 수정해야하는 쿼리. 이를 위해 ADOdb에서 해결 방법이 있습니까? 각 쿼리를 수정하는 것은 다소 지루한 일입니다. ADOdb를 처음 사용하는 목적을 실제로 상쇄합니다.ADOdb를 통한 DB2에서 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을 작성해야합니다. 이것은 데이터베이스 개발과 어떻게 작동하는지입니다. SQL의 특성을 숨기기 위해 Hibernate (Java ORM)와 같은 일종의 추상화 계층을 사용하지 않는다면 다른 데이터베이스에서 실행하기 위해이를 조정해야합니다.

당신이 지금까지 만난 유일한 것은 약간의 인용 부호를 추가하는 것입니다. 사람들은 한 서버에서 다른 서버로 복잡한 쿼리를 변환 할 때 대부분 쿼리를 다시 작성해야합니다.

관련 문제