MySQL에서의 VARCHAR과 TEXT의 차이점
MySQL에서 테이블을 만들 때VARCHAR
열, 길이를 설정해야 합니다.하지만 을 위해서TEXT
길이를 지정할 필요가 없습니다.
와의 차이점은 무엇입니까?VARCHAR
그리고.TEXT
?
TL;DR
TEXT
- 65535자의 고정 최대 크기(최대 크기를 제한할 수 없습니다)
- 2개 이상 필요
c
디스크 공간 바이트, 위치c
는 저장된 문자열의 길이입니다. - 인덱스의 (완전) 일부가 될 수 없습니다.프리픽스 길이를 지정해야 합니다.
VARCHAR(M)
- 가변 최대 크기
M
성격. M
1에서 65535 사이여야 합니다.- 1 + 를 취득합니다.
c
바이트(용)M
255 255) 또는 2 +c
(256 µ의 경우)M
§ 65535) 바이트의 디스크 영역:c
저장된 문자열의 길이입니다. - 인덱스의 일부가 될 수 있다
상세
TEXT
고정 최대 사이즈를 가지다2¹⁶-1 = 65535
성격.
VARCHAR
가변 최대 크기를 가지다M
까지 M = 2¹⁶-1
.
따라서 사이즈를 선택할 수 없습니다.TEXT
할 수 있다VARCHAR
.
다른 차이점은 인덱스를 (전체 텍스트인덱스를 제외하고) 에 배치할 수 없다는 것입니다.TEXT
기둥.
따라서 컬럼에 인덱스를 작성하려면VARCHAR
단, 인덱스의 길이도 한정되어 있습니다.따라서 이 경우,VARCHAR
열이 너무 깁니다. 처음 몇 글자만 사용해야 합니다.VARCHAR
를 참조해 주세요.
하지만, 당신은 또한 사용하기를 원한다VARCHAR
사용 가능한 입력 문자열의 최대 길이가M
예를 들어 전화번호나 이름 같은 거요그럼, 을 사용할 수 있습니다.VARCHAR(30)
대신TINYTEXT
또는TEXT
그리고 누군가가 당신의 전화번호 열에 세 권의 "반지의 제왕" 책의 텍스트를 모두 저장하려고 하면 당신은 처음 30자만 저장합니다.
편집: 데이터베이스에 저장할 텍스트가 65535자를 초과할 경우 선택해야 합니다.MEDIUMTEXT
또는LONGTEXT
단, 주의:MEDIUMTEXT
최대 16MB의 문자열을 저장합니다.LONGTEXT
최대 4 GB사용하시는 경우LONGTEXT
PHP를 통해 데이터를 얻을 수 있습니다(적어도 사용하시는 경우).mysqli
없이.store_result
PHP는 문자열 전체를 버퍼링할 수 있도록 4GB의 메모리를 할당하려고 하기 때문에 메모리 할당 오류가 발생할 수 있습니다.이 문제는 PHP 이외의 언어에서도 발생할 수 있습니다.
단, 입력은 항상 확인해야 합니다(너무 긴가요?).데이터베이스에 저장하기 전에 이상한 코드가 포함되어 있습니까?)
주의: 두 유형 모두 필요한 디스크 용량은 저장된 문자열의 길이에만 의존하며 최대 길이에는 의존하지 않습니다.
예를 들어 charset latin1을 사용하여 "Test"라는 텍스트를 저장할 경우VARCHAR(30)
,VARCHAR(100)
그리고.TINYTEXT
는 항상 5바이트(문자 길이 저장에 1바이트, 문자당 1바이트)가 필요합니다.동일한 텍스트를 에 저장하는 경우VARCHAR(2000)
또는TEXT
컬럼도 같은 공간이 필요하지만 이 경우 6바이트(문자 길이 저장에 2바이트, 문자당 1바이트)가 됩니다.
상세한 것에 대하여는, 메뉴얼을 참조해 주세요.
마지막으로, 공지를 하나 추가하겠습니다. 둘 다TEXT
그리고.VARCHAR
가변 길이 데이터 유형이므로 데이터를 저장하는 데 필요한 공간을 최소화할 수 있습니다.그러나 여기에는 성능의 트레이드오프가 수반됩니다.퍼포먼스를 향상시키려면 다음과 같은 고정 길이 타입을 사용해야 합니다.CHAR
자세한 내용은 여기를 참조하십시오.
위 답변에서 누락된 중요한 내용이 있습니다.
MySQL은 각 행의 최대 크기에 대해 65,535바이트의 제한을 두고 있습니다.a의 크기VARCHAR
열은 최대 행 크기로 카운트됩니다.TEXT
컬럼은 참조에 의해 데이터를 저장하는 것으로 간주되기 때문에 필요한 것은 9~12바이트뿐입니다.즉, "이론적인" 최대 사이즈가VARCHAR
필드에 65,535자를 입력해도 테이블에 열이 두 개 이상 있는 경우에는 이 값을 입력할 수 없습니다.
또한 에 의해 필요한 실제 바이트 수는VARCHAR
필드는 열(및 내용)의 인코딩에 따라 달라집니다.MySQL은 최대 행 크기를 향해 사용되는 최대 바이트 수를 카운트하기 때문에 다음과 같은 멀티바이트 인코딩을 사용하는 경우utf8mb4
(거의 확실하게) 최대 행 크기를 더 많이 사용합니다.
수정:MySQL이 최대 행 크기를 계산하는 방법에 관계없이VARCHAR
/TEXT
필드 데이터는 실제로 행에 저장되거나 참조로 저장되며 기본 스토리지 엔진에 따라 달라집니다.InnoDB의 경우 행 형식이 이 동작에 영향을 줍니다.(고마워 빌-카윈)
사용하는 이유TEXT
:
- 한 단락 이상의 텍스트를 저장하려는 경우
- 열을 인덱싱할 필요가 없는 경우
- 테이블의 행 크기 제한에 도달한 경우
사용하는 이유VARCHAR
:
- 단어 몇 개 또는 문장을 저장하려는 경우
- (완료) 열을 인덱싱하는 경우
- 외부 키 제약 조건이 있는 열을 사용하는 경우
언급URL : https://stackoverflow.com/questions/25300821/difference-between-varchar-and-text-in-mysql
'programing' 카테고리의 다른 글
왜 우리는 최종적으로 블록을 사용하는가? (0) | 2022.09.12 |
---|---|
MariaDB/MySQL을 사용하여 Peeee에서 FLOAT 열 정밀도 지정 (0) | 2022.09.12 |
i = i + i가 0인 이유는 무엇입니까? (0) | 2022.09.12 |
Java용 SQL 파서 라이브러리 (0) | 2022.09.12 |
Nuxt Auth Module을 사용하여 Vuex에서 사용자를 다시 설정하는 방법 (0) | 2022.08.15 |