Maksymalna długość tekstu typu MySQL

Tworzę formularz do wysyłania prywatnych wiadomości i chcę ustawić maxlength wartość pola textarea odpowiednią do maksymalnej długości pola text w mojej tabeli bazy danych MySQL. Ile znaków może przechowywać pole tekstowe typu?

Jeśli dużo, czy byłbym w stanie określić długość w polu tekstowym typu bazy danych, tak jak w przypadku varchar?

Author: Peter Mortensen, 2011-07-20

8 answers

Zobacz maksymalne liczby: 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 Kibibytes)
MEDIUMBLOB, MEDIUMTEXT   L + 3 bytes, where L < 2^24   (16 Mebibytes)
LONGBLOB, LONGTEXT       L + 4 bytes, where L < 2^32   (4 Gibibytes)

L to liczba bajtów w polu tekstowym. Tak więc maksymalna liczba znaków dla tekstu wynosi 216-1 (za pomocą znaków jednobajtowych). Oznacza 65 535 znaków (przy użyciu znaków jednobajtowych).

UTF-8/kodowanie wielobajtowe: używanie kodowania wielobajtowego każdy znak może zużywać więcej niż 1 bajt przestrzeni. Dla UTF-8 zużycie przestrzeni wynosi od 1 do 4 bajtów na char.

 607
Author: fyr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-22 19:13:54

TINYTEXT: 256 bajtów
TEXT: 65,535 bytes
MEDIUMTEXT: 16,777,215 bajtów
LONGTEXT: 4,294,967,295 bajtów

 103
Author: Cristian Oana,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-21 13:45:31
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

Uwaga: Jeśli używasz znaków wielobajtowych, kolumna " Exact Max. Length Allowed " będzie miała różną długość. Na przykład: jeśli używasz znaków 2-bajtowych, dokładna maksymalna długość TINYTEXT wynosiłaby 127 znaków. Zasadniczo jest to liczba dozwolonych bajtów -1.

 43
Author: evilReiko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-02 12:38:27

Acording to http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html , limit to L + 2 bytes, where L < 2^16, czyli 64k.

Nie powinieneś martwić się ograniczaniem go, jest on automatycznie rozkładany na kawałki, które są dodawane w miarę wzrostu łańcucha, więc nie zawsze ślepo używa 64k.

 17
Author: Blindy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-20 18:43:08

Ile znaków może przechowywać pole tekstowe typu?

Zgodnie z dokumentacją możesz użyć maksymalnie 21 844 znaków, jeśli zestaw znaków to UTF8

Jeśli dużo, czy byłbym w stanie określić długość w polu tekstowym db, tak jak w przypadku varchar?

Nie musisz podawać długości. Jeśli potrzebujesz więcej znaków, użyj typów danych MEDIUMTEXT lub LONGTEXT. Z VARCHAR, specifieng długość nie jest dla wymogu przechowywania, tylko dla tego, jak dane są pobierane z bazy danych.

 7
Author: SCC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-27 07:11:29
TINYTEXT 256 bytes
TEXT 65,535 bytes ~64kb
MEDIUMTEXT 16,777,215 bytes ~16MB
LONGTEXT 4,294,967,295 bytes ~4GB

TINYTEXT jest typem danych typu string, który może przechowywać do 255 znaków.

TEXT jest typem danych typu string, który może przechowywać do 65,535 znaków. TEXT jest powszechnie używany do krótkich artykułów.

LONGTEXT jest typem danych string o maksymalnej długości znaków 4,294,967,295. Użyj LONGTEXT, Jeśli chcesz przechowywać duży tekst, np. rozdział powieści.

 5
Author: Sachith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-11 19:39:37

TEXT jest typem danych typu string, który może przechowywać do 65 535 znaków. Ale jeśli chcesz przechowywać więcej danych, zmień jego typ danych na LONGTEXT

ALTER TABLE name_tabel CHANGE text_field LONGTEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;

 0
Author: sohel shaikh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-27 16:17:00

Dla MySql w wersji 8.0.

Wymagania Dotyczące Przechowywania Typu Numerycznego

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

Wartości dla kolumn dziesiętnych (i liczbowych) są reprezentowane za pomocą formatu binarnego, który pakuje dziewięć cyfr dziesiętnych (baza 10) w cztery bajty. Przechowywanie dla części całkowitych i ułamkowych każdej wartości określa się oddzielnie. Każda wielokrotność dziewięciu cyfr wymaga czterech bajtów, a" resztki " cyfr wymagają ułamka czterech bajtów. Zapis wymagany dla nadmiarowych cyfr jest podany przez następujące stolik.

Wymagania dotyczące przechowywania Typu daty i czasu W przypadku kolumn TIME, DATETIME i TIMESTAMP pamięć wymagana dla tabel utworzonych przed MySQL 5.6.4 różni się od tabel utworzonych od wersji 5.6.4. Jest to spowodowane zmianą w 5.6.4, która pozwala tym typom mieć część ułamkową, która wymaga od 0 do 3 bajtów.

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

Od MySQL 5.6.4, pamięć dla roku i daty pozostaje bez zmian. Jednak czas, DATETIME i znacznik czasu są reprezentowane inaczej. DATETIME jest spakowany więcej efektywnie, wymagając 5 zamiast 8 bajtów dla części niefrakcyjnej, a wszystkie trzy części mają część ułamkową, która wymaga od 0 do 3 bajtów, w zależności od dokładności sekund ułamkowych zapisanych wartości.

Fractional Seconds Precision    Storage Required
0                               0 bytes
1, 2                            1 byte
3, 4                            2 bytes
5, 6                            3 bytes
Na przykład TIME(0), TIME(2), TIME(4) i TIME (6) używają odpowiednio 3, 4, 5 i 6 bajtów. TIME I TIME (0) są równoważne i wymagają tego samego przechowywania.

Szczegółowe informacje na temat wewnętrznej reprezentacji wartości temporal można znaleźć w MySQL Internals: Important Algorytmy i struktury.

Wymagania Dotyczące Przechowywania Typu String W poniższej tabeli m przedstawia deklarowaną długość kolumny w postaci znaków dla typów ciągów binarnych i bajtów dla typów ciągów binarnych. L reprezentuje rzeczywistą długość w bajtach danej wartości ciągu.

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)
 0
Author: Rohit.007,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-27 09:16:12