SQLite | 데이터 타입 (Data Type) | SQLite에서 사용할 수 있는 데이터 타입
테이블에 값을 저장하기 위한 컬럼을 정의하는데 있어서 어떤 컬럼에 어떤 값을 저장할지에 따라 데이터 타입을 지정할 수 있다. 여기에서 SQLite의 컬럼에 지정 가능한 데이터 타입에 대해 설명한다.
저장되는 값의 데이터 타입
여러 데이터베이스에서는 컬럼별로 데이터 타입을 지정한다. 그로 인해 컬럼마다 저장할 수 있는 값이 정해진다. SQLite3는 테이블을 정의할 때 컬럼마다 데이터 타입을 지정할 필요는 없다. 데이터 타입을 지정하지 않은 컬럼은 다양한 형태의 값이 저장 될 수 있다.
단지 데이터 유형을 지정하지 않은 경우에도 컬럼에 저장된 값이 어떤 데이터 타입인지를 구분하고 NULL, INTEGER, REAL, TEXT, BLOB 이렇게 5가지 데이터 타입으로 분류 된다.
데이터 타입 | 설명 |
---|---|
NULL | NULL 값 |
INTEGER | 부호있는 정수. 1, 2, 3, 4, 6, or 8 바이트로 저장 |
REAL | 부동 소수점 숫자. 8 바이트로 저장 |
TEXT | 텍스트. UTF-8, UTF-16BE or UTF-16-LE 중 하나에 저장 |
BLOB | Binary Large OBject. 입력 데이터를 그대로 저장 |
SQL 문에 작성 된 값의 작성 방법에 따라 그 값의 데이터 유형을 결정된다. 예를 들어 작은 따움표(’)로 둘러싸여 있으면 TEXT 타입으로, 소수점도 지수도 없으면 INTEGER 타입으로, 소수점 또는 지수가 있으면 REAL 타입으로 결정된다.
컬럼 데이터 타입
테이블을 만들 때에 컬럼에 데이터 타입을 지정하는 수 있는데 필수는 아니다.
다음 예에서 컬럼 id를 INTEGER 타입으로 컬럼 name을 TEXT 타입으로 지정하여 테이블을 작성한다.
create table customer (id integer, name text);
SQLite3에서 컬럼에 지정된 유형은 TEXT, NUMERIC, INTEGER, REAL, NONE 이렇게 5가지이다.
TEXT
NUMERIC
INTEGER
REAL
NONE
컬럼 데이터 타입을 지정된 경우에도 다른 데이터 타입의 값을 저장할 수 있는데, 컬럼의 데이터 타입과 값의 데이터 타입의 조합에 따라 값의 데이터 타입이 변환하여 저장한다. 변환는 다음과 같이 된다.
-
TEXT 타입의 컬럼에 INTEGER 또는 REAL 데이터 타입의 값이 포함 된 경우, TEXT 타입으로 변환 되어 저장된다.
-
NUMERIC 타입의 컬럼에 TEXT 타입의 값이 포함 된 경우, INTEGER 타입 또는 REAL 타입으로 변환을 해보고 성공하면 데이터 타입으로 저장되지만, 실패하면 TEXT 타입 그대로 저장된다.
-
INTEGER 타입의 컬럼에 정수로 나타낼 수 있는 REAL 타입의 값(예 : 34.0 등), 또는 같은 타입의 TEXT 타입의 값이 포함된 경우 INTEGER 형으로 변환되어 저장된다.
-
REAL 타입의 컬럼에 INTEGER 값이 포함 된 경우 REAL 타입으로 변환되어 저장한다.
-
NONE 타입의 컬럼의 경우는 변환이 처리가 없다.
컬럼에 데이터 타입을 지정하는 방법
SQLite3에서 컬럼에 지정된 타입은 TEXT, NUMERIC, INTEGER, REAL, NONE 이렇게 5 가지 있지만, integer 대신에 int로 지정할 수도 있다. 이는 다른 데이터베이스와의 호환성을 고려한 것이라고 생각된다. 어떤 지정 방법이 가능한지에 대해 알아보자.
데이터 타입이 문자열 INT를 포함한 경우 INTEGER 타입이 된다.
create table customer (id int, name text); -- integer 대신에 int로 작성
데이터 타입이 문자열 CHAR, CLOB, TEXT 중 하나를 포함하는 경우 TEXT 타입이 된다.
create table customer (id integer, name varchar); -- text 대신에 varchar로 작성
데이터 타입이 문자열 BLOB를 포함한 경우, 또한 데이터 타입이 지정되지 않은 경우는 NONE 타입이 된다.
데이터 타입이 문자열 REAL, FLOA, DOUB 중 하나를 포함하는 경우 REAL 타입이 된다.
위의 어디에도 포함되지 않은 경우는 NUMERIC 타입이 된다.