-
VARCHARDATABASE/MySQL 2024. 1. 23. 17:56728x90
프로젝트를 진행하면서 varchar에 대하여 많은 고민이 들었었다. 그리하여 되짚어보며 궁금했던 점들에 대한 내용에 대한 검색 돌입!🤔
1. MySQL에서 VARCHAR와 TEXT 차이점은?
2. 지정된 길이보다 더 긴 문자열이 데이터베이스에 저장된다면 어떻게 될까?1. MySQL에서 VARCHAR 와 TEXT 차이점은?
TEXT(또는 CLOB)나 BLOB와 같은 대용량 데이터를 저장하는 컬럼 타입을 LOB(Large Object) 타입이라고 한다.
RDBMS 에서는 LOB 데이터를 Off-Page 라고 하는 외부 공간에 저장한다.
https://dev.mysql.com/doc/refman/8.0/en/char.html
VARCHAR와 TEXT는 MySQL에서 흔히 사용하는 문자열 데이터 타입이다.VARCHAR는 255byte만 지원했지만, MySQL 5.0.3 이후로 VARCHAR와 TEXT 타입 모두 최대 65,535byte 길이를 지원한다.
https://medium.com/daangn/varchar-vs-text-230a718a22a1
VARCHAR
- 가변 길이의 문자열을 저장하는 가장 흔한 문자열 데이터 타입
- 필요한 만큼만 공간을 사용하며 고정 길이 타입보다 저장 공간을 적게 사용하기도 한다.
- 공간을 절약하므로 성능에 도움이 되지만 행이 가변 길이이므로 행을 업데이트할 때 행의 길이가 길어지기도 하며, 이러한 이유로 추가적인 작업이 필요할 수도 있다.
- 최대 길이가 (상대적으로) 크지 않은 경우
- 테이블 데이터를 읽을 때 항상 해당 컬럼이 필요한 경우
- DBMS 서버의 메모리가 (상대적으로) 충분한 경우
VARCHAR(3) 나 VARCHAR(100) 컬럼은 같은 공간을 차지하지만 MySQL에서 내부적으로 값을 저장할 때 고정크기의 메모리가 할당된다. 이렇게되면 메모리 내의 테이블을 사용하게 되는 연산이 필요한 경우에 성능이 저하될 수 있다. 즉 필요한 만큼만 공간을 할당해주는게 최선이라고 한다.
TEXT
- 최대 길이가 (상대적으로) 큰 경우
- 테이블에 길이가 긴 문자열 타입 컬럼이 많이 필요한 경우
- 테이블 데이터를 읽을 때 해당 컬럼이 자주 필요치 않은 경우
2. 지정된 길이보다 더 긴 문자열이 데이터베이스에 저장된다면 어떻게 될까?
1) 오류 발생 : MySQL은 데이터의 길이가 지정된 길이를 초과하면 오류를 발생시킨다. 이는 데이터의 무결성을 유지하기 위함이다.
2) 절단 (Truncation): MySQL은 지정된 길이를 초과하는 데이터를 해당 VARCHAR 길이에 맞게 자를 수 있으며 초과하는 부분이 잘릴 수 있다.
예를 들어, VARCHAR(255) 컬럼에 300자의 문자열을 저장하려고 할 때, MySQL는 해당 문자열을 255자로 자를 수 있다. 이 경우에는 경고나 에러 없이 자동으로 데이터가 잘려서 저장된다. 애플리케이션에서는 이러한 상황을 다루기 위해 데이터의 길이를 미리 검증하거나, 데이터를 저장하기 전에 적절한 길이로 자르는 등의 조치를 취할 수 있으며 이렇게 하면 데이터의 일관성을 유지하고 예상치 못한 동작을 방지할 수 있다.
728x90'DATABASE > MySQL' 카테고리의 다른 글
이것이 MySQL이다 - 1장 DBMS 분류, SQL 개요, MySQL 소개 (0) 2024.02.21 이것이 MySQL이다 - 1장 데이터베이스/DBMS 개념 파악 (0) 2024.02.20