CS/database

CHAR VS VARCHAR

superbono 2021. 7. 20. 18:00

https://wisdomschema.com/varchar-some-pointers/

 

* CHARACTER(s): CHAR

  1. 고정 길이 문자열 정보(Oracle, SQL Server 모두 CHAR로 표현한다. 이는 CHARACTER(s)의 줄임말이다
  2. s는 기본 길이 1바이트, 최대 길이 Oracle 2,000바이트, SQL Server 8,000바이트를 가진다. 
  3. s만큼 최대 길이를 갖고 고정 길이를 가지고 있으므로 할당된 변수 값의 길이가 s보다 작은 경우에는 그 차이 길이만큼 공간으로 채워진다. 예) char(1000)인데 저장된 변수의 길이가 10이라면 나머지 990은 공백공간. -> 비효율적

 

* VARCHAR(s)

  1. CHARACTER VARYING의 약자로 가변 길이 문자열 정보(Oracle은 VARCHAR2로 표현, SQL Server는 VARCHAR로 표헌한다.)
  2. s는 최소 길이 1바이트, 최대 길이 Oracle 4,000바이트, SQL Server 8,000바이트를 가진다. 
  3. s만큼의 최대 길이를 갖지만 가변 길이로 조정되기 때문에 할당된 변수값의 바이트만 적용된다.(Limit 개념) 예) varchar(1000)인데 저장된 변수의 길이가 10이라면 10만 저장됨 

 

 

* VARCHAR과 CHAR의 차이점

VARCHAR 유형은 가변 길이이므로 필요한 영역은 실제 데이터 크기뿐이다. 그렇기 때문에 길이가 다양한 칼럼과, 정의된 길이와 실제 데이터 길이에 차이가 있는 칼럼에 적합하다. 저장 측면에서도 CHAR 유형보다 작은 영역에 저장할 수 있으므로 장점이 있다.

또 하나는 비교 방법의 차이이다. CHAR에서는 문자열을 비교할 때 공백(BLANK)을 채워서 비교하는 방법을 사용한다. 공백 채우기 비교에서는 우선 짧은 쪽의 끝에 공백을 추가하여 2개의 데이터가 같은 길이가 되도록 한다. 그리고 앞에서부터 한 문자씩 비교한다. 그렇기 때문에 끝의 공백만 다른 문자열은 같다고 판단된다. 그에 반해 VARCHAR 유형에서는 맨 처음부터 한 문자씩 비교하고 공백도 하나의 문자로 취급하므로 끝의 공백이 다르면 다른 문자로 판단한다.

 

예) CHAR 유형'AA' = 'AA '

예) VARCHAR 유형 'AA' ≠ 'AA '

 

가장 많이 사용하는 VARCHAR 유형에 대하여 예를 들어 설명하면, 영문 이름이 VARCHAR(40)으로 40바이트가 지정되더라도 실제 ‘PARK,JISUNG’으로 데이터가 입력되는 경우 11바이트의 공간만을 차지한다. 주민등록번호나 사번처럼 자료들이 고정된 길이의 문자열을 가지지 않는다면 데이터 유형은 VARCHAR 유형을 적용하는 것이 바람직하다. 따라서 VARCHAR, NUMERIC 유형에서 정의한 길이나 자릿수의 의미는 해당 데이터 유형이 가질 수 있는 최대한의 한계값을 정의한 것이라고 보아야 한다. 

'CS > database' 카테고리의 다른 글

MySQL SYSDATE(), now()의 차이점  (0) 2022.03.20
MySQL 이모지(Emoji) 문자열 입력  (0) 2021.05.18
Subquery  (0) 2021.04.07
Join  (0) 2021.04.06
JDBC Programming 개발 순서  (0) 2021.03.12