Was entspricht varchar (max) in MySQL?
Was entspricht varchar (max) in MySQL?
Antworten:
Die maximale Länge eines Varchars hängt von der maximalen Zeilengröße in MySQL ab, die 64 KB beträgt (ohne BLOBs):
VARCHAR(65535)
Beachten Sie jedoch, dass das Limit niedriger ist, wenn Sie einen Mehrbyte-Zeichensatz verwenden:
VARCHAR(21844) CHARACTER SET utf8
Hier sind einige Beispiele:
Die maximale Zeilengröße beträgt 65535, aber ein Varchar enthält auch ein oder zwei Bytes, um die Länge einer bestimmten Zeichenfolge zu codieren. Sie können also keinen varchar mit der maximalen Zeilengröße deklarieren, selbst wenn dies die einzige Spalte in der Tabelle ist.
mysql> CREATE TABLE foo ( v VARCHAR(65534) );
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs
Wenn wir jedoch versuchen, die Länge zu verringern, finden wir die größte Länge, die funktioniert:
mysql> CREATE TABLE foo ( v VARCHAR(65532) );
Query OK, 0 rows affected (0.01 sec)
Wenn wir nun versuchen, einen Multibyte-Zeichensatz auf Tabellenebene zu verwenden, stellen wir fest, dass jedes Zeichen als mehrere Bytes gezählt wird. UTF8-Zeichenfolgen verwenden nicht unbedingt mehrere Bytes pro Zeichenfolge, aber MySQL kann nicht davon ausgehen, dass Sie alle zukünftigen Einfügungen auf Einzelbytezeichen beschränken.
mysql> CREATE TABLE foo ( v VARCHAR(65532) ) CHARSET=utf8;
ERROR 1074 (42000): Column length too big for column 'v' (max = 21845); use BLOB or TEXT instead
Trotz des letzten Fehlers mag InnoDB eine Länge von 21845 immer noch nicht.
mysql> CREATE TABLE foo ( v VARCHAR(21845) ) CHARSET=utf8;
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs
Dies ist absolut sinnvoll, wenn Sie 21845 * 3 = 65535 berechnen, was ohnehin nicht funktioniert hätte. Während 21844 * 3 = 65532, was funktioniert.
mysql> CREATE TABLE foo ( v VARCHAR(21844) ) CHARSET=utf8;
Query OK, 0 rows affected (0.32 sec)
DEFAULT
Wert für die Spalte deklarieren . Mit TEXT- oder BLOB-Typen geht das nicht.
TEXT
Längenbegrenzung ist 64K. MEDIUMTEXT
Längenbegrenzung ist 16M. LONGTEXT
Längenbegrenzung ist 4G.
varchar(max)
.
TLDR; MySQL hat kein gleichwertiges Konzept varchar(max)
. Dies ist eine MS SQL Server-Funktion.
varchar(max)
ist eine Funktion von Microsoft SQL Server.
Die Datenmenge, die eine Spalte in Microsoft SQL Server-Versionen vor Version 2005 speichern konnte, war auf 8 KB begrenzt. Um mehr als 8 KB speichern würden Sie verwenden müssen TEXT
, NTEXT
oder BLOB
Spalten - Typen, diese Spaltentypen ihre Daten als eine Sammlung von 8K - Seiten gespeichert , getrennt von der den Tabellendatenseite; Sie unterstützten das Speichern von bis zu 2 GB pro Zeile.
Der große Nachteil dieser Spaltentypen war , dass sie in der Regel spezielle Funktionen und Anweisungen für den Zugriff und ändern Sie die erforderlichen Daten (zB READTEXT
, WRITETEXT
und UPDATETEXT
)
In SQL Server 2005 varchar(max)
wurde eingeführt, um die Daten und Abfragen zu vereinheitlichen, die zum Abrufen und Ändern von Daten in großen Spalten verwendet werden. Die Daten für varchar(max)
Spalten werden inline mit den Tabellendatenseiten gespeichert.
Wenn die Daten in der MAX-Spalte eine 8-KB-Datenseite füllen, wird eine Überlaufseite zugewiesen, und die vorherige Seite zeigt darauf und bildet eine verknüpfte Liste. Im Gegensatz zu TEXT
, NTEXT
und BLOB
der varchar(max)
Spaltentyp unterstützt alle die gleiche Abfragesemantik als andere Spaltentypen.
Also varchar(MAX)
wirklich bedeutet varchar(AS_MUCH_AS_I_WANT_TO_STUFF_IN_HERE_JUST_KEEP_GROWING)
und nicht varchar(MAX_SIZE_OF_A_COLUMN)
.
Um die gleiche Speichermenge wie varchar(max)
in MySql zu erhalten, müssten Sie immer noch auf einen Spaltentyp zurückgreifen BLOB
. Dieser Artikel beschreibt eine sehr effektive Methode zum effizienten Speichern großer Datenmengen in MySQL.
varchar(max)
wirklich bedeutet.
Die maximale Länge eines Varchars beträgt
65535
geteilt durch die maximale Bytelänge eines Zeichens im Zeichensatz, auf den die Spalte gesetzt ist (z. B. utf8 = 3 Bytes, ucs2 = 2, latin1 = 1).
minus 2 Bytes zum Speichern der Länge
abzüglich der Länge aller anderen Spalten
minus 1 Byte für jeweils 8 Spalten, die nullbar sind. Wenn Ihre Spalte null / nicht null ist, wird dies als ein Bit in einem Byte / Bytes gespeichert, das als Nullmaske bezeichnet wird, 1 Bit pro Spalte, das nullwertfähig ist.
Tabelle ändern prg_ar_report_colors Text_Color_Code hinzufügen VARCHAR (max);
alter table prg_ar_report_colors add Text_Color_Code longtext;
Tabelle ändern prg_ar_report_colors Text_Color_Code CLOB hinzufügen;
MySQL Konvertieren der Spalte von VARCHAR in TEXT unter Grenzgröße !!!
mysql> CREATE TABLE varchars1(ch3 varchar(6),ch1 varchar(3),ch varchar(4000000))
;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> SHOW WARNINGS;
+-------+------+---------------------------------------------+
| Level | Code | Message |
+-------+------+---------------------------------------------+
| Note | 1246 | Converting column 'ch' from VARCHAR to TEXT |
+-------+------+---------------------------------------------+
1 row in set (0.00 sec)
mysql>