MySQL 유형 텍스트의 최대 길이


437

개인 메시지를 보내기위한 양식을 만들고 MySQL 데이터베이스 테이블 maxlength의 최대 text필드 길이에 적합한 텍스트 영역 의 값 을 설정하려고 합니다. 문자 입력란에 문자를 몇 개나 저장할 수 있습니까?

많은 경우 varchar와 마찬가지로 데이터베이스 텍스트 유형 필드에 길이를 지정할 수 있습니까?


5
간단한 텍스트 필드에 64k를 입력 하시겠습니까? 고통스러운 ...
마크 B

169
@Marc B 개인 텍스트 메시지 필드에 대량의 쓰레기를 붙여 넣을 수있는 사용자의 능력을 과소 평가하지 마십시오.
simontemplar

5
그렇기 때문에 텍스트 필드 용량을 제한하고 항상 입력을 검증해야합니다.
jpangamarca

답변:


750

최대 수를 참조하십시오 : http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html

TINYBLOB, TINYTEXT       L + 1 bytes, where L < 2^8    (255 Bytes)
BLOB, TEXT               L + 2 bytes, where L < 2^16   (64 Kilobytes)
MEDIUMBLOB, MEDIUMTEXT   L + 3 bytes, where L < 2^24   (16 Megabytes)
LONGBLOB, LONGTEXT       L + 4 bytes, where L < 2^32   (4 Gigabytes)

L은 텍스트 필드의 바이트 수입니다. 따라서 텍스트의 최대 문자 수는 2 16 -1입니다 (1 바이트 문자 사용). 65535자를 의미합니다 (1 바이트 문자 사용).

UTF-8 / 멀티 바이트 인코딩 : 각 문자가 멀티 바이트 인코딩을 사용하면 1 바이트 이상의 공간이 소비 될 수 있습니다. UTF-8의 경우 공간 소비는 문자 당 1-4 바이트입니다.


2
@ fyr- 여기서 L + 2 바이트의 의미는 무엇입니까? 여기서 L <2 ^ 16? 좀 더 정의 해 주시겠습니까? 다른 현명한 방법으로 텍스트 필드에 얼마나 많은 문자를 저장할 수 있습니까? 제발 ....
Bajrang

2
@JJ L은 문자 수이고 문자 수는 16의 거듭 제곱보다 2보다 작아야합니다. 2 ^ 16 = 65536. 따라서 65535 바이트 + 3 바이트 = 65538 바이트를 사용하는 65535자를 입력 할 수 있습니다. 채워진 필드.
FYR

9
크기 제한은 바이트 단위 입니다. 따라서 멀티 바이트 문자를 사용하는 경우 TEXT 열에 2 ^ 16자를받지 않지만 2 ^ 16 바이트에 저장할 수있는 문자는 많이 있습니다.
Bill Karwin

4
빌 카윈의 말. 문자가 아닌 바이트. 문자는 4 바이트를 사용하여 주어진 인코딩 (예 : UTF-8의 💩)으로 저장할 수 있습니다.
basic6

8
MySQL에서 utf8은 최대 3 바이트, utf8mb4는 최대 4 바이트를 소비합니다. reference
mpen

126

TINYTEXT : 256 바이트
텍스트 : 65,535 바이트
중간 텍스트 : 16,777,215 바이트
LONGTEXT : 4,294,967,295 바이트


10
수락 된 답변에 따르면 TINYTEXT는 256 바이트 대신 255 바이트 여야한다고 생각합니까?
cytsunny

83
Type       | Approx. Length     | Exact Max. Length Allowed
-----------------------------------------------------------
TINYTEXT   | 256 Bytes          |           255 characters
TEXT       |  64 Kilobytes      |        65,535 characters
MEDIUMTEXT |  16 Megabytes      |    16,777,215 characters
LONGTEXT   |   4 Gigabytes      | 4,294,967,295 characters

참고 : 멀티 바이트 문자 (예 : 각 아랍어 문자가 2 바이트 인 아랍어)를 사용하는 경우 "정확한 최대 길이 허용 된" TINYTEXT열은 최대 127 개의 아랍어 문자 를 사용할 수 있습니다 (참고 : 공백, 대시, 밑줄 및 기타 문자) , 1 바이트 문자 임).

기본적으로 다음과 같습니다.

"정확한 최대 길이 허용"= "약 길이"(바이트)-1



8

문자 입력란에 문자를 몇 개나 저장할 수 있습니까?

설명서 에 따르면 문자 집합이 UTF8 인 경우 최대 21,844자를 사용할 수 있습니다

많은 경우 varchar에서와 같이 db 텍스트 유형 필드에 길이를 지정할 수 있습니까?

길이를 지정할 필요가 없습니다. 더 많은 문자가 필요한 경우 MEDIUMTEXT 또는 LONGTEXT 데이터 유형을 사용하십시오. VARCHAR을 사용하면 지정 길이는 스토리지 요구 사항이 아니며 데이터베이스에서 데이터를 검색하는 방법에만 해당됩니다.


8
TINYTEXT 256 bytes
TEXT 65,535 bytes ~64kb
MEDIUMTEXT 16,777,215 bytes ~16MB
LONGTEXT 4,294,967,295 bytes ~4GB

TINYTEXT최대 255문자 까지 저장할 수있는 문자열 데이터 유형입니다 .

TEXT최대 65,535문자를 저장할 수있는 문자열 데이터 유형입니다 . TEXT일반적으로 간단한 기사에 사용됩니다.

LONGTEXT최대 4,294,967,295문자 길이를 가진 문자열 데이터 유형입니다 . LONGTEXT소설의 장과 같은 큰 텍스트를 저장해야하는 경우에 사용하십시오 .


1

TEXT최대 65,535자를 저장할 수있는 문자열 데이터 유형입니다. 그러나 여전히 더 많은 데이터를 저장하려면 데이터 유형을LONGTEXT

ALTER TABLE name_tabelCHANGE text_fieldLONGTEXT CHARACTER SET utf8COLLATE utf8_general_ciNOT NULL;


1

MySql 버전 8.0의 경우

숫자 형 저장 요구 사항

Data Type       Storage Required
TINYINT         1 byte
SMALLINT        2 bytes
MEDIUMINT       3 bytes
INT, INTEGER    4 bytes
BIGINT          8 bytes
FLOAT(p)        4 bytes if 0 <= p <= 24, 8 bytes if 25 <= p <= 53
FLOAT           4 bytes
DOUBLE, REAL    8 bytes
DECIMAL(M,D), NUMERIC(M,D)  Varies; see following discussion
BIT(M)  approximately (M+7)/8 bytes

DECIMAL (및 NUMERIC) 열의 값은 9 진수 (기본 10)를 4 바이트로 묶는 이진 형식을 사용하여 표시됩니다. 각 값의 정수 및 소수 부분에 대한 저장은 별도로 결정됩니다. 9 자리의 각 배수에는 4 바이트가 필요하고 "남은"자리수에는 4 바이트의 일부가 필요합니다. 초과 숫자에 필요한 저장 공간은 다음 표에 나와 있습니다.

날짜 및 시간 유형 스토리지 요구 사항 TIME, DATETIME 및 TIMESTAMP 열의 경우 MySQL 5.6.4 이전에 생성 된 테이블에 필요한 스토리지는 5.6.4에서 생성 된 테이블과 다릅니다. 이는 5.6.4의 변경으로 인해 이러한 유형에 소수 부분이있을 수 있으며 0-3 바이트가 필요합니다.

Data Type   Storage Required Before MySQL 5.6.4   Storage Required as of MySQL 5.6.4
YEAR        1 byte                                1 byte
DATE        3 bytes                               3 bytes
TIME        3 bytes                               3 bytes + fractional seconds storage
DATETIME    8 bytes                               5 bytes + fractional seconds storage
TIMESTAMP   4 bytes                               4 bytes + fractional seconds storage

MySQL 5.6.4부터 YEAR 및 DATE의 스토리지는 변경되지 않습니다. 그러나 TIME, DATETIME 및 TIMESTAMP는 다르게 표시됩니다. DATETIME은 비소수 부분에 8 바이트가 아닌 5 바이트를 필요로하여보다 효율적으로 압축되며, 세 부분 모두 저장된 값의 소수 초 정밀도에 따라 0에서 3 바이트 사이의 소수 부분이 필요합니다.

Fractional Seconds Precision    Storage Required
0                               0 bytes
1, 2                            1 byte
3, 4                            2 bytes
5, 6                            3 bytes

예를 들어, TIME (0), TIME (2), TIME (4) 및 TIME (6)은 각각 3, 4, 5 및 6 바이트를 사용합니다. TIME과 TIME (0)은 동일하며 동일한 스토리지가 필요합니다.

임시 값의 내부 표현에 대한 자세한 내용은 MySQL 내부 : 중요 알고리즘 및 구조를 참조하십시오.

문자열 유형 저장 요구 사항 다음 표에서 M은 이진이 아닌 문자열 유형의 문자로 선언 된 열 길이를 나타내고 이진 문자열 유형의 바이트로 나타냅니다. L은 주어진 문자열 값의 실제 길이를 바이트 단위로 나타냅니다.

Data Type                    Storage Required
CHAR(M)                      The compact family of InnoDB row formats optimize storage for variable-length character sets. See COMPACT Row Format Characteristics. Otherwise, M × w bytes, <= M <= 255, where w is the number of bytes required for the maximum-length character in the character set.
BINARY(M)                    M bytes, 0 <= M <= 255
VARCHAR(M), VARBINARY(M)     L + 1 bytes if column values require 0  255 bytes, L + 2 bytes if values may require more than 255 bytes
TINYBLOB, TINYTEXT           L + 1 bytes, where L < 28
BLOB, TEXT                   L + 2 bytes, where L < 216
MEDIUMBLOB, MEDIUMTEXT       L + 3 bytes, where L < 224
LONGBLOB, LONGTEXT           L + 4 bytes, where L < 232
ENUM('value1','value2',...)  1 or 2 bytes, depending on the number of enumeration values (65,535 values maximum)
SET('value1','value2',...)   1, 2, 3, 4, or 8 bytes, depending on the number of set members (64 members maximum)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.