시스템 데이터 타입에 대해서
숫자
숫자는 일반적인 정수나 소수 등의 숫자를 나타내기 위하여 사용되는 자료 형이다.
정수(int, smallint, tinyint, bigint, big)
정수는 1, -25, 1708 등의 일반적인 수를 나타내기 위해 사용하는 수를 말한다.
그리고 그 사용범위, 즉 수의 크기나 양, 음의 경우에 따라 int, smallint, tinyint, bigint 로 나누어 사용하게 된다.
bit는 0 또는 1을 표현하는 형식이므로 대부분 bool형식의 컬럼에 사용된다.
고정 소수점(decimal, numeric)
decimal이나 numeric은 -10-1, 10-1 까지의 수에 대해 정밀도와 크기를 사용자가 지정하여 사용하는 형식으로 어떤 데이터를 오차없이 일정한 범위 내에서
사용하기 위해 쓰인다.
예를 들어 decimal(12,4) 라고 하면 전체가 12자리의 숫자이며
소수점 이하 4자리를 사용할수 있는 수를 의미한다.
numeric 은 decimal과 같다.
부동 소수점(float, real)
부동 소수점 형식은 원주율과 같이 아주 큰 숫자에서 약간의 오차가 허용될때 사용된다.
날짜 및 시간(datetime, smalldatetime)
날짜 형태의 데이터 타입은 날짜(년, 월, 일) 뿐만 아니라 시간(시, 분, 초)까지도
나타내기 위하여 사용하게 된다.
날짜의 입력은 getdate() 라는 함수를 사용하여 입력 할수도 있다.
' SELECT GETDATE()'
문자열(char, varchar, nchar, nvarchar, text, ntext)
문자형은 보통 사용하는 일반적인 단어나 문장을 데이터로 나타내기 위해 사용되는 형식이다.
문자열은 크게 일반문자열 과 유니코드 문자열로 나눈다.
char, varchar, text와 같은 형식의 일반 문자열인 경우 1byte가 하나의 글자(영어)를 표현한다.
nchar, nvarchar, ntext 의 유니코드 문자열인 경우 2byte를 사용해 하나의 글자를 표현하는데
예를 들어 nchar(50)
이라고 하면
100byte 크기에 영어나 한글 상관없이 모든 문자가 50글자까지 들어갈수 있는 영역을 확보하게 되는것이다.
고정문자열(char, nchar)과 가변 문자열(varchar, nvarchar)
char, nchar와 같은 고정문자열은 언제나 처음 지정한 일정한 크기의 저장영역을 사용하게 된다.
예로 A란 컬럼의 형식을 char(100)으로 지정하고,
그 컬럼에 ‘test’ 란데이터를 입력하면 A란 컬럼은 입력된 데이터 크기에 관계없이(‘testing’이란 데이터가 입력되었다고 하더라도)
항상 100byte의 영역을 확보하게 되는 것을 말한다.
반면 varchar, nvarchar 와 같은 가변 문자열은 처음에 확보한 영역 이내에서 입력되는 데이터의 크기에 따라
그 사용영역이 바뀌는 형식을 말하는데, 예를 들어 B란 컬럼을 varchar(100) 이라고 지정하고 그곳에 ‘test’ 란 데이터를 입력하면
B란 컬럼은 4byte만의 공간을 확보하게 된다.
마찬가지로 ‘testing’이란 데이터를 입력하면 7byte의 공간만을 확보하게 된다.
text와 ntext
text와 ntext 형식은 0~20GB까지의 대량의 데이터를 저장할수 있는 영역을 확보하게 된다.
보통 입력할 내용이 조금 길어지면 text형식을 많이 사용하는 것을 볼수 잇는데, 이건 잘못된 방법이다.
text 형을 사용하게 되면 일단 속도가 느려진다.
이것은 일반적인 저장소인 DateRow에 저장되는것이 아니라
다른 저장소에 저장되기때문이다.
이 외에 다른 문제들이 생길수 있기에
어떤 컬럼의 형식을 결정할 경우 충분히 고려하여 형식을 정해야 한다.
char나 varchar 가 제공하는 8000byte 란 영어로 8,000글자, 한글로는 4,000글자에 해당되는 크기로
그리 작은 공간은 아니니 기억해두자.
바이너리(binary, varbinary, image)
바이너리 타입의 데이터는 보통 사용되는 문자, 숫자뿐만 아니라 특수문자를 포함하는 모든 데이터들을 나타내기 위해 사용한다.
image 타입에 대하여
image 타입은 2GB까지의 바이너리 데이터를 지정할수 있는 데이터 형이다.
이미지 파일을 곧바로 서버에 올릴수는 없다.
이럴 경우에 업로드 컴포넌트를 이용해 파일시스템 상에 이미지 파일을 저장한후
ASP 등으로 이미지의 경로만 입력해주고, 나중에 이미지 데이터를 처리할 때 서버상의 이미지 파일로 링크된 경로를 통해 이용하는것이 좋다.
화폐단위(money, smallmoney)
화폐타입의 데이터는 주로 달러, 센트 와 같은 미국 통화를 사용하는 곳에서 주로 쓰인다.
기타(cursor, uniqueidentifier, timestamp)
커서 타입
cursor 타입은 보통 테이블을 만들때 사용하는 일반적인 데이터 형식으로 사용하지는 않는다.
스토어드 프로시저 사용시 레코드 단위로 나뉘는 데이터를 처리하기 위한 타입이라고 생각하자.
uniqueidentifier 타입
uniqueidentifier는 Global Identifier의 형식으로서
Global Identifier는 전세계적으로 단 하나의 유일한 키 값을 만들어 낼수 있는 데이터 타입이다.
uniqueidentifier는 SQL7.0에서 새로이 추가된 타입으로서 newid() 라는 함수를 이용하여 16바이트의 저장공간에 세계에서 유일한 키 값을 가진 문자열을 저장한다.
timestamp 타입
Timestamp 타입은 사용자가 이용하는 경우보다 SQL 서버가 자체적으로 사용하는 일이 더 잦다.
이 타입은 SQL서버가 데이터의 변경에 따른 LOG에 변경이 있을경우
그내용의 순서를 확인하기 위하여 SQL 서버가 사용하는 일련번호의 형태로 이용한다.
하나의 테이블에 하나의 timestamp 타입 생성만 허용되며, 사용자는 이를 확인할수 없다.
varchar(max), nvarchar(max), varbinary(max)
SQL 서버 2005에서는 이전 버전의 text, ntext, image 데이터 형식 대신에
varchar(max), nvarchar(max), varbinary(max) 데이터 형식을 사용한다.
기존 text, ntext, image가 가지던 문제인 입출력 파라미터에 사용하지 못하거나,
문자열 함수등을 이용하지 못했던 제한들이 풀렸다.
identity 속성
identity 속성은 어떤 특정컬럼에 identity 를 설정하게 되면,
새로운 데이터가 추가될때 마다 그 컬럼에는 처음에 지정해준 초기 값부터 증가 값으로 연속적인 수,
즉 일렬번호가 자동으로 증가되며 생성된다.
예를 들어 identity(1,1)으로 설정하면 1,2,3, 순으로 자동증가 된다.
이 속성은 하나의 테이블에 한개의 컬럼에만 적용될수 있으며,
identity 속성을 가진 컬럼에는 기본적으로 사용자가 저장한 값을 저장할수 없다.
insert into identity_test(id, name) values(7,'red')
란 쿼리를 실행시킬 경우
만약 identity_insert가 off 로 설정되어있을 경우 직접 값을 못넣으므로,
set identity_insert on 을 사용한다.
SET IDENTITY_INSERT 테이블명 ON
이후 다시 SET IDENTITY_INSERT OFF 하면
바로 이전 값 부터 다시 증가하며 값이 생성된다.
이런 identity 속성을 이요하여 생성된 값을 처음부터 다시 순서를 주고 싶다면,
처음부터 다시 identity 를 구축하는 방법 밖에는 없다.
정보 감사합니다~
•7년 ago
정보 보고 갑니다~
blog-admin
•7년 ago
도움이 되셨다니 기쁩니다 ^^