[mysql] TINYTEXT, TEXT, MEDIUMTEXT 및 LONGTEXT 최대 저장소 크기

MySQL의 문서 , 네 개의 텍스트 종류가 있습니다 :

  1. TINYTEXT
  2. 본문
  3. 중간 텍스트
  4. 긴 텍스트

문자 인코딩이 UTF-8이라고 가정 할 때 각 데이터 유형의 열에 저장할 수있는 최대 길이는 얼마입니까?



답변

로부터 문서 :

      타입 | 최대 길이
----------- + -------------------------------------
  TINYTEXT | 255 (2 8 -1) 바이트
      텍스트 | 65,535 (2 16 -1) 바이트 = 64 킬로바이트
MEDIUMTEXT | 16,777,215 (2 24 -1) = 16 바이트 MiB 크기
  긴 텍스트 | 4294967295 (2 32 -1) = 4 바이트 지브

수 있습니다 문자 당신의 컬럼에 저장 될 수에 따라 달라집니다 문자 인코딩 .


답변

같은 답변의 확장

  1. SO 포스트 는 오버 헤드 및 스토리지 메커니즘에 대해 자세히 설명합니다.
  2. 포인트 (1)에서 언급했듯이 TINYTEXT 대신 항상 VARCHAR을 사용해야합니다. 그러나 VARCHAR을 사용할 때 최대 행 크기는 65535 바이트를 초과하지 않아야합니다.
  3. 여기에 설명 된대로 http://dev.mysql.com/doc/refman/5.0/en/charset-unicode-utf8.html , utf-8의 경우 최대 3 바이트.

이것은 빠른 결정을위한 견고한 추정 테이블입니다!

  1. 따라서 최악의 가정 (utf-8 문자 당 3 바이트)에서 최상의 경우 (utf-8 문자 당 1 바이트)
  2. 영어가 단어 당 평균 4.5 자라고 가정
  3. x는 할당 된 바이트 수입니다.

배반

      Type | A= worst case (x/3) | B = best case (x) | words estimate (A/4.5) - (B/4.5)
-----------+---------------------------------------------------------------------------
  TINYTEXT |              85     | 255               | 18 - 56
      TEXT |          21,845     | 65,535            | 4,854.44 - 14,563.33  
MEDIUMTEXT |       5,592,415     | 16,777,215        | 1,242,758.8 - 3,728,270
  LONGTEXT |   1,431,655,765     | 4,294,967,295     | 318,145,725.5 - 954,437,176.6

Chris V의 답변도 참조하십시오 : https://stackoverflow.com/a/35785869/1881812


답변

@ Ankan-Zerob의 도전으로, 이것은 단어로 측정 된 각 텍스트 유형에 저장할 수있는 최대 길이의 추정치입니다 .

      Type |         Bytes | English words | Multi-byte words
-----------+---------------+---------------+-----------------
  TINYTEXT |           255 |           ±44 |              ±23
      TEXT |        65,535 |       ±11,000 |           ±5,900
MEDIUMTEXT |    16,777,215 |    ±2,800,000 |       ±1,500,000
  LONGTEXT | 4,294,967,295 |  ±740,000,000 |     ±380,000,000

에서 영어 , 단어 당 4.8 문자 좋은 평균 (예 : 아마 norvig.com/mayzner.html 워드 길이가 도메인에 따라 (학술 논문 대 예를 들어 음성 언어) 달라질 수 있지만, 너무 너무 정확한 것을 아무 소용이 없다). 영어는 대부분 1 바이트 ASCII 문자이며, 가끔씩 멀티 바이트 문자를 사용하므로 문자 당 1 바이트에 가깝습니다. 단어 간 공백에는 추가 문자가 허용되어야하므로 단어 당 5.8 바이트에서 반올림했습니다. 폴란드어와 같이 악센트가 많은 언어는 단어가 더 적은 독일어와 같이 단어가 약간 적게 저장됩니다.

그리스어, 아랍어, 히브리어, 힌디어, 태국어 등과 같은 멀티 바이트 문자가 필요한 언어는 일반적으로 UTF-8에서 문자 당 2 바이트가 필요합니다. 단어 당 5 글자를 거칠게 추측하면서 단어 당 11 바이트에서 반올림했습니다.

CJK 스크립트 (한지, 한자, 히라가나, 가타카나 등) 나는 아무것도 모른다. 나는 문자가 UTF-8에서 주로 3 바이트를 필요로한다고 생각하고 (단순화하면) 단어 당 약 2 문자를 사용하는 것으로 간주 될 수 있으므로 다른 두 문자 사이에있을 것입니다. (CJK 스크립트는 UTF-16을 사용하여 스토리지를 덜 필요로 할 수 있습니다).

이것은 물론 스토리지 오버 헤드 등을 무시합니다.


답변

이것은 좋지만 질문에 대답하지 않습니다.

“TINYTEXT 대신 항상 VARCHAR을 사용해야합니다.” Tinytext는 행이 넓은 경우에 유용합니다. 데이터가 레코드에 저장되기 때문입니다. 성능 오버 헤드가 있지만 사용이 있습니다.


답변