충분히 쌓여가는
18 SQL Server에서 다루는 자료형 정리 본문
데이터 삽입을 하면서 삽입하려는 데이터의 자료형이 열에 지정한 자료형과 맞지 않으면 오류가 발생.
SQL Server는 숫자형, 문자형, 날짜형, 지리형, 공간형 등 다양한 자료형을 제공.
숫자형
숫자형은 정수, 실수 등의 숫자.
SQL Server가 제공하는 숫자형 정보
숫자형 데이터 사용 시 주의사항
형 변환(type casting)에 주의해야 한다.
암시적 형변환
직접 자료형을 변경하지 않아도 실행 환경에서 자동으로 자료형을 변경하는 것
ex) 10/3 -> 3이 반환되지만 10/3.0 -> 3.33333이 반환(암시적 형변환)
연산 대상의 자료형이 다를 경우 데이터 우선순위에 따라 시스템이 상위 자료형으로 변경하므로 오류나 성능에 문제가 발생하기 쉬운만큼 주의해야 한다.
명시적 형변환
사용자가 직접 자료형을 변경하는 것
CATST, CONVERT 등의 함수를 사용해 자료형을 변환하는 것
숫자형 데이터의 형변환: 정수, 실수
SELECT 10/3;
SELECT 10/3.0;
일치하지 않는 자료형은 SQL Server에서 호환할 수 있는 형식으로 암시적으로 변환되는데, 우선순위가 정의된 프로세스에 따라 수행된다.
우선순위가 낮은 자료형은 우선순위가 높은 자료형으로 변환된다.
자료형 우선순위
숫자형 데이터는 합, 평균, 나누기 등 다양한 집계 함수에서 자주 사용한다.
문자형
다양한 문자를 저장할 수 있는 자료형
'고정 길이'와 '가변 길이'로 구분할 수 있다.
고정 길이
실젯값을 입력하지 않아도 지정한 만큼의 저장공간 사용
가변 길이
실제 입력한 값의 크기만큼만 저장 공간 사용
유니코드
한글이나 특수 문자 등을 저장할 때 사용하며, 한 글자에 2바이트라서 자료형에서 지정한 데이터 크기의 50% 정도만 저장할 수 있다.
SQL Server가 제공하는 문자형 정보
'고정 길이 문자열'과 '가변 길이 문자열', '유니코드 고정 길이 문자열'과 '유니코드 가변 길이 문자열' 속성을 가진 테이블에 A라는 문자를 삽입한 뒤 실제로 사용하는 저장 공간의 크기를 확인하는 쿼리
CREATE TABLE char_table (
col_1 char(50),
col_2 varchar(50),
col_3 nchar(50),
col_4 nvarchar(50)
)
GO
INSERT INTO char_table VALUES ('A', 'A', N'A', N'A')
Go
SELECT
col_1, LEN(col_1) AS char_length, DATALENGTH(col_1) AS data_length,
col_2, LEN(col_2) AS char_length, DATALENGTH(col_2) AS data_length,
col_3, LEN(col_3) AS char_length, DATALENGTH(col_3) AS data_length,
col_4, LEN(col_4) AS char_length, DATALENGTH(col_4) AS data_length
FROM char_table;
LEN: 문자열 길이를 확인하는 함수
DATALENGTH: 문자열 크기를 확인하는 함수
결과를 보면 삽입된 글자의 길이는 모두 1이지만 실제 저장 공간에 사용한 데이터의 길이는 다르다
유니코드를 사용하지 않았을 때 글자가 깨지는 것을 확인하는 쿼리
use DoItSQL
GO
CREATE TABLE unicode_table(
col_1 varchar(50),
col_2 nvarchar(50)
)
GO
INSERT INTO unicode_table VALUES ('가', N'가')
GO
SELECT * FROM unicode_table;
DoItSQL 데이터베이스의 기본 데이터 정렬 속성은 영어이므로, 유니코드를 사용하지 않을 경우 화면의 글자가 ?로 깨져 보이는 것을 확인할 수 있다.
유니코드란
국자마다 고유의 언어와 문자가 있듯이, 문자 형식의 데이터를 저장하고 관리할 때 국가별 코드 페이지가 달라서 서로 호환하지 않는 문제가 있다.
한국어 데이터베이스에 한국어만 사용하고, 영어 데이터베이스에 영어만 사용할 경우에는 큰 문제가 발생하지 않지만, 하나의 데이터베이스에 영어, 한국어, 중국어 등 여러 나라의 언어를 함께 사용할 때는 코드에 따른 문자가 서로 달라 문제가 발생한다.
이러한 문제점을 해결하고자 유니코드 형식을 사용하는데 전 세계에서 사용되는 대부분의 문자에서 단일 인코딩하는 방법을 정의한다.
유니코드 문자열을 저장하려면 한 글자당 2바이트 공간이 필요하다. 그래서 CHAR(4)는 4바이트이지만 NCHAR(4)는 8바이트의 공간이 필요하다.
유니코드로 저장하려면 자료형도 유니코드 형태여야 하지만, 데이터를 입력할 때 유니코드라는 것을 알려주고 문자열 앞에 반드시 대문자 N을 사용한다.
유니코드는 문자에만 해당되므로 숫자나 날짜 등에는 해당되지 않는다.
유니코드 형식의 열과 그렇지 않은 열에 데이터 삽입
-- 테이블 생성
CREATE TABLE doit_unicode (
col_1 varchar(50),
col_2 nvarchar(50)
)
-- 데이터 입력
INSERT doit_unicode VALUES('ABC', 'ABC')
INSERT doit_unicode VALUES('가나다', '가나다')
INSERT doit_unicode VALUES('가나다', N'가나다')
-- 데이터 검색
SELECT * FROM doit_unicode
-- 테이블 삭제
DROP TABLE doit_unicode
유니코드 형식이 아닌 열에 한글을 입력했을 경우 글자가 깨진다
유니코드 형식의 열인데도 유니코드라는 것을 가리키는 대문자 N을 생략하면 한글이 깨지는 것을 알 수 있다.
유니코드 자료형의 경우에도 N을 지칭하지 않으면 일반 코드로 입력되는 것을 알 수 있다.
날짜형과 시간형
날짜와 시간 자료형에는 날짜 또는 시간만 저장하는 타입도 있고, 날짜와 시간을 함께 저장하는 타입도 있다
정확도에 다라 데이터 크기와 형식이 조금씩 다르다
SQL Server가 제공하는 날짜형/시간형 정보
날짜 형식의 테이블을 생성한 다음, 현재 시간을 각 열에 같게 입력해 데이터가 어떻게 저장되는지 확인
CREATE TABLE date_table(
JustDate date,
JustTime time,
JustDateTime datetime,
JustDateTime2 datetime2);
INSERT INTO date_table
VALUES (SYSDATETIME(), SYSDATETIME(), SYSDATETIME(), SYSDATETIME());
SELECT * FROm date_table;
정확도에 따라 초 단위에서 소수점 자릿수가 다른 것을 알 수 있다
문자 형 변환을 할 수 있는 데이터 유형을 나타낸 표
문자와 날짜 형식도 형 변환을 할 수 있다.
행의 각 자료형이 열의 자료형으로 변환할 수 있는지 나타낸다
'MSSQL > SQL 시작하기' 카테고리의 다른 글
17 새 테이블 생성하며 검색 결과 입력 (0) | 2024.10.06 |
---|---|
16 다른 테이블에 검색 결과 입력하기 (0) | 2024.10.06 |
15 외래키로 연결된 데이터 입력, 삭제하기 (6) | 2024.10.05 |
14 DELETE 문으로 데이터 삭제하기 (0) | 2024.10.05 |
13 UPDATE 문으로 데이터 수정하기 (0) | 2024.10.05 |