SQLite에서 사용할 수 있는 데이터 타입

편집일시: 2019-11-13 23:22 조회수: 2124 댓글수: 0
테이블에 값을 저장하기 위한 컬럼을 정의하는데 있어서 어떤 컬럼에 어떤 값을 저장할지에 따라 데이터 타입을 지정할 수 있다. 여기에서 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 ``` 컬럼 데이터 타입을 지정된 경우에도 다른 데이터 타입의 값을 저장할 수 있는데, 컬럼의 데이터 타입과 값의 데이터 타입의 조합에 따라 값의 데이터 타입이 변환하여 저장한다. 변환는 다음과 같이 된다. 1. TEXT 타입의 컬럼에 INTEGER 또는 REAL 데이터 타입의 값이 포함 된 경우, TEXT 타입으로 변환 되어 저장된다. 2. NUMERIC 타입의 컬럼에 TEXT 타입의 값이 포함 된 경우, INTEGER 타입 또는 REAL 타입으로 변환을 해보고 성공하면 데이터 타입으로 저장되지만, 실패하면 TEXT 타입 그대로 저장된다. 3. INTEGER 타입의 컬럼에 정수로 나타낼 수 있는 REAL 타입의 값(예 : 34.0 등), 또는 같은 타입의 TEXT 타입의 값이 포함된 경우 INTEGER 형으로 변환되어 저장된다. 4. REAL 타입의 컬럼에 INTEGER 값이 포함 된 경우 REAL 타입으로 변환되어 저장한다. 6. 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 타입이 된다.