Maximale Länge für Text vom Typ MySQL

437

Ich erstelle ein Formular zum Senden privater Nachrichten und möchte den maxlengthWert eines Textbereichs entsprechend der maximalen Länge eines textFelds in meiner MySQL-Datenbanktabelle festlegen. Wie viele Zeichen kann ein Textfeld speichern?

Wenn viel, könnte ich die Länge im Feld für den Datenbanktexttyp angeben, wie ich es mit varchar tun würde?

CyberJunkie
quelle
5
64k in ein einfaches Textfeld eingeben? schmerzhaft ...
Marc B
169
@Marc B Unterschätzen Sie niemals die Fähigkeit eines Benutzers, große Mengen Müll in ein privates Textnachrichtenfeld einzufügen.
Simontemplar
5
Und deshalb sollten Sie die Textfeldkapazität einschränken und Ihre Eingaben immer validieren ...
jpangamarca

Antworten:

750

Die maximale Anzahl finden Sie unter: 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 ist die Anzahl der Bytes in Ihrem Textfeld. Die maximale Anzahl von Zeichen für Text beträgt also 2 16 -1 (unter Verwendung von Einzelbytezeichen ). Bedeutet 65 535 Zeichen (unter Verwendung von Einzelbytezeichen).

UTF-8 / MultiByte-Codierung : Bei Verwendung der MultiByte-Codierung belegt jedes Zeichen möglicherweise mehr als 1 Byte Speicherplatz. Für UTF-8 beträgt der Speicherplatzverbrauch zwischen 1 und 4 Byte pro Zeichen.

fyr
quelle
2
@ fyr- Was bedeutet hier für L + 2 Bytes, wobei L <2 ^ 16 ist? Könnten Sie es bitte etwas genauer definieren? Andernfalls können Sie mir sagen, wie viele Zeichen wir im Textfeld speichern können? Bitte ....
Bajrang
2
@JJ L ist die Anzahl der Zeichen und die Anzahl der Zeichen muss kleiner als 2 hoch 16 sein. 2 ^ 16 = 65536. Sie können also 65535 Zeichen eingeben, die 65535 Bytes + 3 Bytes = 65 538 Bytes pro voll verbrauchen gefülltes Feld.
Fyr
9
Beachten Sie, dass die Größenbeschränkungen in Bytes angegeben sind . Wenn Sie also Mehrbyte-Zeichen verwenden, erhalten Sie keine 2 ^ 16 Zeichen in einer TEXT-Spalte, sondern so viele Zeichen, wie Sie in 2 ^ 16 Bytes speichern können.
Bill Karwin
4
Was Bill Karwin gesagt hat. BYTES, NICHT CHARAKTERE. Ein Zeichen kann 4 Bytes zum Speichern mit der angegebenen Codierung verwenden (wie 💩 in UTF-8).
basic6
8
Beachten Sie, dass in MySQL utf8 bis zu 3 Bytes verbraucht, utf8mb4 bis zu 4. Referenz
mpen
126

TINYTEXT: 256 Bytes
TEXT: 65.535 Bytes
MEDIUMTEXT: 16.777.215 Bytes
LONGTEXT: 4.294.967.295 Bytes

Cristian Oana
quelle
10
Ich denke, TINYTEXT sollte 255 Bytes statt 256 Bytes sein, gemäß der akzeptierten Antwort?
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

Hinweis: Bei Verwendung von Multibyte-Zeichen (wie Arabisch, bei dem jedes arabische Zeichen 2 Byte benötigt) kann die Spalte "Genaue maximale zulässige Länge" TINYTEXTbis zu 127 arabische Zeichen enthalten (Hinweis: Leerzeichen, Bindestrich, Unterstrich und andere solche Zeichen) sind 1-Byte-Zeichen).

Im Grunde ist es wie:

"Exakte maximale Länge zulässig" = "Ungefähre Länge" in Byte - 1

böseReiko
quelle
18

Laut http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html ist das LimitL + 2 bytes, where L < 2^16 .

Sie sollten sich nicht darum kümmern müssen, es einzuschränken. Es wird automatisch in Blöcke zerlegt, die hinzugefügt werden, wenn die Zeichenfolge wächst, sodass 64k nicht immer blind verwendet werden.

Blind
quelle
8

Wie viele Zeichen kann ein Textfeld speichern?

Laut Dokumentation können Sie maximal 21.844 Zeichen verwenden, wenn der Zeichensatz UTF8 ist

Wenn viel, könnte ich dann die Länge im Feld für den DB-Texttyp angeben, wie ich es mit varchar tun würde?

Sie müssen die Länge nicht angeben. Wenn Sie mehr Zeichen benötigen, verwenden Sie die Datentypen MEDIUMTEXT oder LONGTEXT. Bei VARCHAR gilt die angegebene Länge nicht für die Speicheranforderungen, sondern nur für das Abrufen der Daten aus der Datenbank.

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

TINYTEXTist ein String-Datentyp, der bis zu 255Zeichen speichern kann .

TEXTist ein String-Datentyp, der bis zu 65,535Zeichen speichern kann . TEXTwird häufig für kurze Artikel verwendet.

LONGTEXTist ein String-Datentyp mit einer maximalen Zeichenlänge 4,294,967,295. Verwenden LONGTEXTSie diese Option, wenn Sie großen Text speichern müssen, z. B. ein Kapitel eines Romans.

Sachith
quelle
1

TEXTist ein Zeichenfolgendatentyp, der bis zu 65.535 Zeichen speichern kann. Wenn Sie jedoch mehr Daten speichern möchten, ändern Sie den Datentyp inLONGTEXT

ALTER TABLE name_tabelCHANGE text_fieldLONG CHARACTER SET utf8COLLATE utf8_general_ciNOT NULL;

sohel shaikh
quelle
1

Für die MySql Version 8.0.

Speicheranforderungen für numerische Typen

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

Werte für DECIMAL- (und NUMERIC-) Spalten werden in einem Binärformat dargestellt, das neun Dezimalstellen (Basis 10) in vier Bytes packt. Die Speicherung für die ganzzahligen und gebrochenen Teile jedes Werts wird separat bestimmt. Jedes Vielfache von neun Ziffern erfordert vier Bytes, und die "verbleibenden" Ziffern erfordern einen Bruchteil von vier Bytes. Der für überschüssige Ziffern erforderliche Speicher ist in der folgenden Tabelle angegeben.

Speicheranforderungen für Datums- und Uhrzeittyp Für die Spalten TIME, DATETIME und TIMESTAMP unterscheidet sich der für Tabellen, die vor MySQL 5.6.4 erstellt wurden, erforderliche Speicher von den ab 5.6.4 erstellten Tabellen. Dies ist auf eine Änderung in 5.6.4 zurückzuführen, die es diesen Typen ermöglicht, einen Bruchteil zu haben, der 0 bis 3 Bytes erfordert.

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

Ab MySQL 5.6.4 bleibt der Speicher für YEAR und DATE unverändert. TIME, DATETIME und TIMESTAMP werden jedoch unterschiedlich dargestellt. DATETIME wird effizienter gepackt und benötigt 5 statt 8 Bytes für den nicht gebrochenen Teil, und alle drei Teile haben einen Bruchteil, der 0 bis 3 Bytes erfordert, abhängig von der Sekundenbruchteilgenauigkeit der gespeicherten Werte.

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

Beispielsweise verwenden TIME (0), TIME (2), TIME (4) und TIME (6) jeweils 3, 4, 5 und 6 Bytes. TIME und TIME (0) sind äquivalent und erfordern denselben Speicher.

Ausführliche Informationen zur internen Darstellung von Zeitwerten finden Sie unter MySQL-Interna: Wichtige Algorithmen und Strukturen.

Speicheranforderungen für Zeichenfolgentypen In der folgenden Tabelle gibt M die deklarierte Spaltenlänge in Zeichen für nicht-binäre Zeichenfolgentypen und Bytes für binäre Zeichenfolgentypen an. L repräsentiert die tatsächliche Länge eines gegebenen Zeichenfolgenwerts in Bytes.

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)
Rohit.007
quelle