programing

MySQL에서의 VARCHAR과 TEXT의 차이점

luckcodes 2022. 9. 12. 18:37

MySQL에서의 VARCHAR과 TEXT의 차이점

MySQL에서 테이블을 만들 때VARCHAR열, 길이를 설정해야 합니다.하지만 을 위해서TEXT길이를 지정할 필요가 없습니다.

와의 차이점은 무엇입니까?VARCHAR그리고.TEXT?

TL;DR

TEXT

  • 65535자의 고정 최대 크기(최대 크기를 제한할 수 없습니다)
  • 2개 이상 필요c디스크 공간 바이트, 위치c는 저장된 문자열의 길이입니다.
  • 인덱스의 (완전) 일부가 될 수 없습니다.프리픽스 길이를 지정해야 합니다.

VARCHAR(M)

  • 가변 최대 크기M성격.
  • M1에서 65535 사이여야 합니다.
  • 1 + 를 취득합니다.c바이트(용)M255 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사용하시는 경우LONGTEXTPHP를 통해 데이터를 얻을 수 있습니다(적어도 사용하시는 경우).mysqli없이.store_resultPHP는 문자열 전체를 버퍼링할 수 있도록 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