Heute werde ich Ihnen die Größen-, Längen- und Mengenbeschränkungen verschiedener Objekte in MySQL 8.0 vorstellen. Beschränkung der BezeichnerlängeIn der folgenden Tabelle werden die maximalen Längen verschiedener Bezeichnertypen beschrieben.
Der Alias eines Feldes in einer CREATE VIEW-Anweisung erlaubt maximal 64 Zeichen statt 256 Zeichen. Wenn Sie beim Definieren einer Einschränkung keinen Einschränkungsnamen angeben, generiert MySQL automatisch einen internen Namen basierend auf dem Namen der zugehörigen Tabelle. Beispielsweise bestehen automatisch generierte Fremdschlüssel- und CHECK-Einschränkungsnamen aus dem Tabellennamen plus _ibfk_ oder _chk_ und einer Nummer. Wenn die Länge des Tabellennamens nahe an der Grenze des Einschränkungsnamens (64 Zeichen) liegt, ist er nach dem Hinzufügen weiterer Zeichen möglicherweise zu lang, was zu einem Fehler führt. Bezeichner werden in Unicode (UTF-8) gespeichert. Dies gilt auch für Bezeichner in Tabellendefinitionen und Bezeichner, die in Berechtigungstabellen in der MySQL-Datenbank gespeichert sind. Die Größe des Identifikationsfelds in der Berechtigungstabelle wird in Zeichen angegeben. Wir können Mehrbytezeichen (wie etwa Chinesisch) als Bezeichner verwenden, ohne dass die zulässige Länge dadurch beeinträchtigt wird. In Versionen vor NDB 8.0.18 erlaubte NDB Cluster Datenbank- und Tabellennamen mit einer Länge von bis zu 63 Zeichen. Diese Einschränkung wurde seit NDB 8.0.18 entfernt. Der Benutzername und der Hostname in MySQL-Kontonamen sind Zeichenfolgen und keine Bezeichner. Die maximale Länge dieser Felder in der Berechtigungstabelle finden Sie im nächsten Abschnitt. Längenbegrenzung des Bereichsfelds in der BerechtigungstabelleDas Bereichsfeld in der Berechtigungstabelle wird zum Speichern von Zeichenfolgen verwendet und der Standardwert ist eine leere Zeichenfolge. In der folgenden Tabelle sind die maximalen Zeichenfolgenlängen aufgeführt, die in diesen Feldern gespeichert werden dürfen.
Die Zeichenfolgen „Host“ und „Proxied_host“ werden vor der Speicherung in Kleinbuchstaben umgewandelt. Zum Prüfen der Zugriffsberechtigungen wird beim Vergleich der Zeichenfolgen „User“, „Proxied_user“, „authentifizierungszeichenfolge“, „Db“ und „Tabellenname“ die Groß-/Kleinschreibung beachtet. Bei Vergleichen der Zeichenfolgen Host, Proxied_host, Column_name und Routine_name wird die Groß-/Kleinschreibung nicht beachtet. Begrenzung der Anzahl von Datenbanken und TabellenMySQL begrenzt die Anzahl der Datenbanken nicht. Das zugrunde liegende Dateisystem kann jedoch die Anzahl der Verzeichnisse begrenzen, die einer Datenbank entsprechen können. MySQL begrenzt die Anzahl der Tabellen nicht. Das zugrunde liegende Dateisystem kann jedoch die Anzahl der Dateien begrenzen, die eine Tabelle speichern kann. Verschiedene Speicher-Engines können besondere Einschränkungen haben. InnoDB ermöglicht die Erstellung von 4 Milliarden Tabellen. TabellengrößenbeschränkungDie Größe einer Tabelle in einer MySQL-Datenbank hängt tatsächlich von der Dateigrößenbeschränkung des Betriebssystems ab und nicht von der internen MySQL-Beschränkung. Für Windows-Benutzer sind die Dateisysteme FAT und VFAT (FAT32) nicht für den Einsatz in Produktionsumgebungen geeignet. Es wird empfohlen, zum Speichern von MySQL-Datenbanken das Dateisystem NTFS zu verwenden. Wenn der Fehler „Tabelle voll“ auftritt, sind die möglichen Gründe folgende:
Sie verwenden eine MyISAM-Tabelle und der für die Tabelle erforderliche Speicherplatz übersteigt die von der internen Zeigergröße zugelassene Größe. MyISAM lässt standardmäßig eine Größe von bis zu 256 TB für Daten- und Indexdateien zu, diese Grenze kann jedoch bis auf die maximal zulässige Größe von 65.536 TB (2567 − 1 Byte) geändert werden. Wenn Sie eine MyISAM-Tabelle benötigen, die größer als die Standardgrenze ist, und Ihr Betriebssystem große Dateien unterstützt, unterstützt die Anweisung CREATE TABLE die Optionen AVG_ROW_LENGTH und MAX_ROWS. Siehe Anweisung CREATE TABLE. Der Server verwendet diese Optionen, um zu bestimmen, wie groß eine Tabelle sein darf. Wenn die Zeigergröße für eine vorhandene Tabelle zu klein ist, können Sie die Optionen mit ALTER TABLE ändern, um die maximal zulässige Größe einer Tabelle zu erhöhen. Siehe ALTER TABLE-Anweisung. ALTER TABLE tbl_name MAX_ROWS=1000000000 AVG_ROW_LENGTH=nnn; Sie müssen AVG_ROW_LENGTH nur für Tabellen mit BLOB- oder TEXT-Spalten angeben. In diesem Fall kann MySQL den erforderlichen Speicherplatz nicht allein anhand der Zeilenanzahl optimieren. Um die standardmäßige Größenbeschränkung für MyISAM-Tabellen zu ändern, legen Sie myisam_data_pointer_size fest, das die Anzahl der Bytes festlegt, die für interne Zeilenzeiger verwendet werden. Der Wert wird verwendet, um die Zeigergröße für neue Tabellen festzulegen, wenn Sie die Option MAX_ROWS nicht angeben. Der Wert von myisam_data_pointer_size kann zwischen 2 und 7 liegen. Beispielsweise erlaubt ein Wert von 4 für Tabellen, die das dynamische Speicherformat verwenden, Tabellen mit bis zu 4 GB; ein Wert von 6 erlaubt Tabellen mit bis zu 256 TB. Tabellen, die das feste Speicherformat verwenden, haben eine größere maximale Datenlänge. Informationen zu Speicherformatmerkmalen finden Sie unter MyISAM-Tabellenspeicherformate. Sie können die maximalen Daten- und Indexgrößen mit dieser Anweisung überprüfen: TABELLENSTATUS AUS db_name ANZEIGEN, WIE 'tbl_name'; Sie können auch myisamchk -dv /Pfad/zur/Tabellenindexdatei verwenden. Siehe SHOW-Anweisungen oder myisamchk – MyISAM-Dienstprogramm zur Tabellenwartung. Es gibt weitere Möglichkeiten, die Dateigrößenbeschränkungen für MyISAM-Tabellen zu umgehen: Wenn Ihre große Tabelle schreibgeschützt ist, können Sie sie mit myisampack komprimieren. myisampack komprimiert eine Tabelle normalerweise um mindestens 50 %, sodass Sie tatsächlich viel größere Tabellen erhalten. myisampack kann auch mehrere Tabellen zu einer einzigen Tabelle zusammenführen. Siehe myisampack – Komprimierte, schreibgeschützte MyISAM-Tabellen generieren. MySQL enthält eine MERGE-Bibliothek, mit der Sie eine Sammlung von MyISAM-Tabellen mit identischer Struktur wie eine einzelne MERGE-Tabelle verwalten können. Weitere Informationen finden Sie unter Die MERGE-Speicher-Engine. Sie verwenden die Speicher-Engine MEMORY (HEAP). In diesem Fall müssen Sie den Wert der Systemvariable max_heap_table_size erhöhen. Siehe Serversystemvariablen. Einschränkungen bei der Anzahl der Felder und der ZeilengrößeFeldmengenbegrenzungJede Tabelle in MySQL enthält maximal 4096 Felder, aber die tatsächliche Begrenzung der Feldanzahl ist kleiner als dieser Wert. Diese Grenze hängt von mehreren Faktoren ab:
DatenzeilengrößenbeschränkungDie Größenbeschränkung einer Datenzeile wird durch die folgenden Faktoren bestimmt:
Beispiel für eine DatenzeilengrößenbeschränkungDie folgenden InnoDB- und MyISAM-Beispiele demonstrieren die maximale Zeilengrößenbeschränkung von MySQL von 65535 Bytes. Diese Beschränkung ist unabhängig von der Speicher-Engine und muss eingehalten werden, auch wenn die Speicher-Engine größere Datenzeilen unterstützen kann. mysql> CREATE TABLE t (a VARCHAR(10000), b VARCHAR(10000), c VARCHAR(10000), d VARCHAR(10000), e VARCHAR(10000), f VARCHAR(10000), g VARCHAR(6000)) ENGINE=InnoDB ZEICHENSATZ latin1; FEHLER 1118 (42000): Zeilengröße zu groß. Die maximale Zeilengröße für die verwendeten Der Tabellentyp, ohne BLOBs, ist 65535. Dies beinhaltet Speicheraufwand, Schauen Sie im Handbuch nach. Sie müssen einige Spalten in TEXT oder BLOBs ändern mysql> CREATE TABLE t (a VARCHAR(10000), b VARCHAR(10000), c VARCHAR(10000), d VARCHAR(10000), e VARCHAR(10000), f VARCHAR(10000), g VARCHAR(6000)) ENGINE=MyISAM-ZEICHENSATZ latin1; FEHLER 1118 (42000): Zeilengröße zu groß. Die maximale Zeilengröße für die verwendeten Der Tabellentyp, ohne BLOBs, ist 65535. Dies beinhaltet Speicheraufwand, Schauen Sie im Handbuch nach. Sie müssen einige Spalten in TEXT oder BLOBs ändern Das folgende MyISAM-Beispiel ändert eines der Felder in TEXT, wodurch eine Überschreitung der 65535-Byte-Grenze vermieden wird, da BLOB- und TEXT-Felder in der Datenzeilengröße nur 9 bis 12 Byte einnehmen. mysql> CREATE TABLE t (a VARCHAR(10000), b VARCHAR(10000), c VARCHAR(10000), d VARCHAR(10000), e VARCHAR(10000), f VARCHAR(10000), g TEXT(6000)) ENGINE=MyISAM-ZEICHENSATZ latin1; Abfrage OK, 0 Zeilen betroffen (0,02 Sek.) Die folgende InnoDB-Tabelle kann erfolgreich erstellt werden, da das Feld in TEXT geändert wird, um eine Überschreitung des 65535-Byte-Limits zu vermeiden, und durch die Offpage-Speicherung von InnoDB eine Überschreitung des InnoDB-Datenzeilengrößenlimits vermieden werden kann. mysql> CREATE TABLE t (a VARCHAR(10000), b VARCHAR(10000), c VARCHAR(10000), d VARCHAR(10000), e VARCHAR(10000), f VARCHAR(10000), g TEXT(6000)) ENGINE=InnoDB ZEICHENSATZ latin1; Abfrage OK, 0 Zeilen betroffen (0,02 Sek.) Die Speicherung von Feldern variabler Länge beinhaltet Längeninformationen, die ebenfalls in die Datenzeilengröße einberechnet werden. Beispielsweise erfordert ein VARCHAR(255) CHARACTER SET utf8mb3-Feld 2 Bytes, um die Datenlänge zu speichern, sodass jeder Wert bis zu 767 Bytes belegen kann. Die folgende Anweisung erstellt die Tabelle t1 erfolgreich, da ihre Felder 32765 + 2 Bytes plus 32766 + 2 Bytes erfordern, wodurch die Grenze von 65535 Bytes eingehalten wird: mysql> TABELLE ERSTELLEN t1 (c1 VARCHAR(32765) NICHT NULL, c2 VARCHAR(32766) NICHT NULL) ENGINE = InnoDB-ZEICHENSATZ latin1; Abfrage OK, 0 Zeilen betroffen (0,02 Sek.) Mit der folgenden Anweisung kann die Tabelle t2 nicht erstellt werden, da die Länge des Felds zwar die Grenze von 65535 Bytes nicht überschreitet, diese jedoch nach dem Hinzufügen von 2 Bytes zur Datensatzlänge überschritten wird: mysql> TABELLE ERSTELLEN t2 (c1 VARCHAR(65535) NICHT NULL) ENGINE = InnoDB-ZEICHENSATZ latin1; FEHLER 1118 (42000): Zeilengröße zu groß. Die maximale Zeilengröße für die verwendeten Der Tabellentyp, ohne BLOBs, ist 65535. Dies beinhaltet Speicheraufwand, Schauen Sie im Handbuch nach. Sie müssen einige Spalten in TEXT oder BLOBs ändern Durch die Reduzierung der Spaltenlänge auf 65.533 oder weniger kann die Anweisung erfolgreich ausgeführt werden. mysql> TABELLE ERSTELLEN t2 (c1 VARCHAR(65533) NICHT NULL) ENGINE = InnoDB-ZEICHENSATZ latin1; Abfrage OK, 0 Zeilen betroffen (0,01 Sek.) Bei MyISAM-Tabellen erfordern nullbare Felder zusätzlichen Speicherplatz, um aufzuzeichnen, ob die Daten null sind. Jedes nullbare Feld erfordert 1 zusätzliches Bit, das auf Bytes aufgerundet wird. Mit der folgenden Anweisung kann die Tabelle t3 nicht erstellt werden, da MyISAM zusätzlichen Speicherplatz zum Speichern von Feldern benötigt, die Nullwerte zulassen. Dadurch überschreitet die Datenzeilengröße 65.535 Byte: mysql> TABELLE ERSTELLEN t3 (c1 VARCHAR(32765) NULL, c2 VARCHAR(32766) NULL) ENGINE = MyISAM-ZEICHENSATZ latin1; FEHLER 1118 (42000): Zeilengröße zu groß. Die maximale Zeilengröße für die verwendeten Der Tabellentyp, ohne BLOBs, ist 65535. Dies beinhaltet Speicheraufwand, Schauen Sie im Handbuch nach. Sie müssen einige Spalten in TEXT oder BLOBs ändern Informationen zur InnoDB-NULL-Spaltenspeicherung finden Sie unter InnoDB-Zeilenformate. InnoDB begrenzt die Zeilengröße (lokale Daten, die innerhalb einer Datenbankseite gespeichert sind) auf etwas weniger als die Hälfte der Größe einer Datenbankseite. Die folgende Anweisung schlägt fehl, da die Länge aller Felder die Datenzeilengrößenbeschränkung von 16 KB für eine InnoDB-Seite überschreitet. mysql> TABELLE ERSTELLEN t4 ( c1 CHAR(255),c2 CHAR(255),c3 CHAR(255), c4 CHAR(255),c5 CHAR(255),c6 CHAR(255), c7 CHAR(255),c8 CHAR(255),c9 CHAR(255), c10 CHAR(255),c11 CHAR(255),c12 CHAR(255), c13 CHAR(255),c14 CHAR(255),c15 CHAR(255), c16 CHAR(255),c17 CHAR(255),c18 CHAR(255), c19 CHAR(255),c20 CHAR(255),c21 CHAR(255), c22 CHAR(255),c23 CHAR(255),c24 CHAR(255), c25 CHAR(255),c26 CHAR(255),c27 CHAR(255), c28 CHAR(255),c29 CHAR(255),c30 CHAR(255), c31 CHAR(255),c32 CHAR(255),c33 CHAR(255) ) ENGINE=InnoDB ROW_FORMAT=DYNAMISCHER STANDARD-ZEICHENSATZ latin1; FEHLER 1118 (42000): Zeilengröße zu groß (> 8126). Das Ändern einiger Spalten in TEXT oder BLOB kann hilfreich sein. Im aktuellen Zeilenformat wird das BLOB-Präfix von 0 Bytes inline gespeichert. ZusammenfassenDies ist das Ende dieses Artikels über die Größen- und Längenbeschränkungen verschiedener Objekte in MySQL. Weitere Informationen zu den Größen- und Längenbeschränkungen von MySQL-Objekten finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den verwandten Artikeln weiter unten. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
>>: Häufig verwendete HTML-Meta-Enzyklopädie (empfohlen)
Inhaltsverzeichnis Funktionseinführung Rendern 1....
Als ich kürzlich kazam in Ubuntu 20.04 zur Aufzei...
Die Wirkung dieser Funktion ist ähnlich wie vue的p...
Inhaltsverzeichnis 1. Inhaltsverzeichnis 1.1 Konz...
Inhaltsverzeichnis 1. Was ist eine JavaScript-Eng...
Linux wird von immer mehr Benutzern geliebt. Waru...
In diesem Beispiel wird jQuery verwendet, um eine...
Im Vue-Gerüst können wir sehen, dass im neuen Vue...
Verwenden Sie den Vscode-Editor, um eine Vue-Vorl...
Vorwort Linux-Gruppen sind Organisationseinheiten...
Wir wissen, dass die in JS am häufigsten verwende...
Inhaltsverzeichnis 1. Primärschlüssel vorhanden 2...
MySQL-Volltextsuche, chinesische Lösung Kürzlich ...
Für die Installation von Docker auf CentOS muss d...
Der Hauptteil der Seite: <body> <ul id=&...