본문 바로가기
프로그래밍/DB/DB

[DB] MSSQL, ORACLE, MYSQL 자료형[펌]

by 아유카와 2012. 11. 4.

출처 : http://cafe.naver.com/itea11

-------------------------------


1. 자료형의 종류

 

   [mssql2000]

        bigint           8바이트    64비트    부호 있음

        int               4바이트    32비트       "

        smallint        2바이트    16비트       "

        tinyint          1바이트     8비트        "

        decimal(p,s)   실수표현    p: 전체자리수 , s는 소수점 부분의 길이

        numeric(p,s)    "

        money         8바이트   64비트  통화 단위  1/10000의 정확성을 가짐

        smallmoney  4바이트 32비트    "

   [oracle]

        number          10바이트   80비트 부호있음  , 기본이 10바이트

        number(n)      바이트 지정, n은 바이트 숫자 

        number(p, s)  실수표현   p: 전체자리수, s는 소수점 부분의 길이

 

   [mysql]  : 가장 많음 .ㅠ.ㅠ

        tinyint            1바이트   정수

        smallint          2바이트   정수

        mediumint       3바이트   정수

        int, integer      4바이트   정수

        bigint             8바이트   정수

        float               4바이트   부동소수점 표현

        double           8바이트   부동소수점 표현

        real                double과 같음

        decimal(p,s)  실수표현   p: 전체자리수, s는 소수점 부분의 길이

        numeric(p,s)   decimal과 같음

        bit(n)             n비트 정수 표현

       

2. 자료형의 선언

   

    테이블을 만들 때 이 자료형에 대해서 선언 하는 방법을 알아보자. 대부분 다 비슷하다.

   다만 몇가지  () 안에 옵션에 있는 것만 알아보면 될 것이다.

 

    [mssql2000]

        create table test (

             aaa bigint,

             bbb decimal(10, 2) not null

        )

 

    [oracle]

        create table test (

             aaa number(8),

             bbb number,

             ccc number(10, 2)

        )

 

    [mysql]

         create table test (

              aaa bigint,

              bbb double,

              ccc decimal(10, 2)

         )

 

    위와 같은 형태로 테이블을 생성 할 때 우리는 자료형을 지정할 수 있다.

 

3. 숫자형에 대한 몇가지 옵션

 

   [mssql2000]

       mssql에서는 정수형에 대해서 identity 라는 옵션을 걸어 줄 수 있다.

       이것은 그 필드에 숫자를 자동으로 채우줌으로써.. 유일안 키값을 생성 할 수 있다.

 

   [oracle]

       오라클에서는 따로 옵션은 없다.

 

   [mysql]

       mysql에서는 auto_increment 라는 옵션으로 identity와 같은 역할을 하게끔 할 수 있다.

       mysql은 unsigned와 zerofill을 가지고 있다. unsigned는 부호없는 숫자를 만들어서 좀 더 넓은 범위의 숫자를 사용

       할 수 있게 하고 zerofill은 현재 필드의 값을 0으로 모두 채우는 옵션이다.

 

   다만 주의 해야 할 것은 mysql 에서는 auto_increment가 되면 그 필드는 기본키가 되어야 하지만 mssql에서는 identity가 되어도

   기본키가 되지 않아도 된다. 다만 대부분 기본적으로 그 필드를 기본키로 걸 뿐이다.

 

4. 이기종 디비간의 호환성

   대부분의 디비는 정수형에 대해서 가지고 있다. 하지만 몇가지 충족되지 않는 자료형을 가지고 있기 때문에

   숫자형에 대해서는

 

   mssql : int, decimal(p,s)

   oracle : number, number(p,s)

   mysql : int, decimal(p,s)

 

 

출처 :

1. 문자열 형의 종류

 

    [mssql]

        char(n)         최대 8000자, 유니코드 아님, 고정길이      

        varchar(n)     최대 8000자, 유니코드 아님, 가변길이      

        text               최대 2^31-1 자, 유니코드 아님, 가변길이       (32비트)

 

        nchar(n)         최대 4000자, 유니코드 아님, 고정길이      

        nvarchar(n)     최대 4000자, 유니코드 아님, 가변길이      

        ntext               최대 2^30-1 자, 유니코드 아님, 가변길이       (32비트)

 

        binary           최대 8000바이트, 고정길이, 이진문자열(비트 스트링)

        varbinary       최대 8000바이트, 고정길이, 이진문자열(비트 스트링)

        image           최대 2^31-1 바이트, 고정길이, 이진문자열(비트 스트링)

 

    [oracle]

       char(n)          최대 2000 바이트

       varchar2(n)      최대 4000 바이트

 

       nchar(n)         최대 2000 바이트

       nvarchar2(n)      최대 4000 바이트

 

       CLOB            1바이트 문자열, 최대 4GB

       BLOB            이진 문자열, 최대 4GB

       BFILE            바이너리 데이타 외부화일로 저장, 최대 4GB

 

       LONG           가변길이 문자열, 최대 2GB

       LONG RAW    가변길이 이진 데이타, 최대 2GB

       RAW             가변길이 이진 데이타, 최대 2000 바이트

 

    [mysql]

       char(n)          최대 255 바이트 까지

       varchar(n)      최대 255 바이트 까지

 

       binary(n)        이진데이타, 바이트 지정한만큼, 고정길이

       varbinary(n)    이진데이타, 바이트 지정한만큼, 가변길이

 

       tinyblob           이진데이타, 최대 255 바이트  (2^8)

       blob                이진데이타, 최대 65535 바이트  (2^16)

       mediumblob      이진데이타, 최대 2^24 바이트

       longblob          이진데이타, 최대 2^32 바이트,

 

       tinytext           1바이트 문자열, 최대 255 자  (2^8)

       text                1바이트 문자열, 최대 65535 자(2^16)

       mediumtext      1바이트 문자열, 최대 2^24 자

       longtext          1바이트 문자열, 최대 2^32 자

 

손수 다 적을려니 너무 빡시네. .ㅋㅋ 암튼 대충 이런 문자열 타입들이 있네요...

 

전체적으로 크게 보면

 

    일반 문자열 데이타, 유니코드 문자열 데이타, 대용량 이진 데이타, 대용량 문자열 데이타 등 으로 나눌 수 있는데요.

    실제로 코딩 할 때 쓰는건 몇 개 없네요..ㅋㅋ 암튼 이것으로 다들 잘 해봅시다.

 

2. 자료형의 선언

 

    [mssql]

     create table test (

        aaaa varchar(200)

     )

 

    [oracle]

     create table test (

        aaaa varchar2(300)

     )

 

    [mysql]

     create table test (

        aaaa varchar(400)

     )

 

    기본적으로 바이트 선언하는 형태는 너무나도 간단합니다. 특정 자료형과 길이만 적어 주기 때문에.. ^^

 

3.  이기종간의 디비 호환성

 

    일반적으로 문자열은 varchar 를 많이 씁니다.

    물론 속도 줄인다고 char 쓰시는 분들도 계시는데 이건 디비에 따라서 일정길이 이상이 되면 내부적으로 varchar로 돌아가기 때문에

    그냥 varchar 쓰시는게 더 좋을 듯 합니다.. 그리고 속도 차이도 거의 없구여..

 

    대부분의 디비에 들어가는 형태는 가변길이 문자열입니다. 그래서

   

    varchar, nvarchar, 오라클은 varchar2 등을 쓰게 됩니다.

 

    다만 조금씩 차이 나는 부분이  대용량의 글을 적을 때가 문제인데요...

 

    mssql : text

    oracle : clob

    mysql : text 관련 타입

 

    등으로 보편화 될 수가 있겠습니다..

 

    그래서 varchar(varchar2) 나 text(clob) 등으로 문자열에 대한 데이타를 정의해주시면 되겠구여..

 

    가끔씩 이미지를 통째로 필드에 넣는 경우가 있습니다. 그럴경우는 이진데이타 자료형으로 해서 넣어줄 수 있는데요..

 

    mssql : varbinary

    oracle : blob, bfile

    mysql : blob 관련 타입

 

    등을 많이 사용하게 됩니다.

 

    하지만 아직까지는 그런 대용량 이미지 데이타 들은 디비에 넣지 않고 그냥 파일로 복사하고 링크만 저장하는 방식이 선호가

    되고 있습니다. 나중에 디비 성능이 좀더 좋아지고 하드웨어, 네트워크 성능이 더 좋아지면 그때는 데이타베이스에서 모든 것을

    처리하는 때가 오겠죠? ^^ 그 때를 기대해봅니다.

 

 

출처 : http://cafe.naver.com/itea11