2015. 2. 10. 17:31

웹개발을 하다보면 DB를 사용하게 됩니다.

일반적으로 PHP의 경우에는 mysql을 가장 많이 사용하죠...

최근에 sqlite와 mysql을 사용하다가 알게된 주의할 점을 알려드리겠습니다.

 

물론 차이점은 이번엔 포스팅하는 것외에도 많이 있습니다만

작업을 하면서 체험한것 4가지만 포스팅하겠습니다.

 

1. 테이블 비우기

테이블을 완전히 비우고 auto increment값 까지 초기화를 하려고 합니다.

 

mysql : "TRUNCATE TABLE 테이블명" 을 사용합니다.

 

그러나 sqlite는 위 쿼리가 동작하지 않습니다.

sqlite에서 관련기능을 찾아본 결과는 저는 다음의 2가지 방법을 찾았습니다.

1.1 "DELETE FROM 테이블명"
     "VACUUM"

     위 2개의 쿼리를 순차적으로 실행합니다.

1.2 "DELETE FROM 테이블명";
     "DELETE FROM sqlite_sequence WHERE name='테이블명'";

     역시 위 두개의 쿼리를 순차적으로 진행합니다.

 

 

2. AUTOINCREMENT (자동증가)

테이블 생성 시 키필드등에 자동으로 값이 증가하게 만들때 사용합니다.

그러나 두 DB는 스펠링이 다릅니다.

mysql : AUTO_INCREMENT

sqlite : AUTOINCREMENT

이 부분에서 sqlite에 "AUTO_INCREMENT" 키를 넣어 보지는 않았습니다.

 

 

3. '\'와 같은 특수 문자 처리

DB에 값을 입력할때 '\'와 같은 특수 문자를 입력하려 할때 두 DB가 차이점을 보입니다.

mysql에서는 특별한 처리를 해줍니다.

일반적으로 addslashes()와 같은 함수를 이용하여 '\'문자가 '\\'로 변환하여 입력합니다.

 

그러나 sqlite는 그 값을 그대로 받아들입니다. mysql처럼 addslashes()함수를 사용하면

DB에 '\'가 아닌 '\\'값 그대로 입력되게 됩니다.

 

 

4. 테이블 생성시 default 값 설정

테이블을 생성할때 필드에 초기값을 지정할 수 있습니다.

이때 사용하는 Default키에 대해 비교하겠습니다.

 

이번엔 sqlite 부터 설명드리겠습니다.

sqlite에서는 "txtDesc TEXT DEFAULT 'aaa' NOT NULL" 등과 같이

TEXT 타입의 필드에 기본값을 지정할 수 있습니다.

 

그러나 mysql에서는 위 문구는 오류를 발생합니다.

확인해보면 mysql에서는 BLOB, TEXT 타입의 필드에는 기본값을 지정할 수 없다고 나옵니다.

 

먼저 이야기했던것 처럼 두 DB는 더 많은 차이가 있습니다.

이번에 포스팅 하고자 했던 것은 코딩을 할 때

자주 사용하는 부분에서 직접 겪은 차이점만 거론한것입니다. ^^

 

Posted by 작은0악마