Was entspricht varchar (max) in MySQL?
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.Was ist VARCHAR (max)?
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
oderBLOB
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
undUPDATETEXT
)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ürvarchar(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
undBLOB
dervarchar(max)
Spaltentyp unterstützt alle die gleiche Abfragesemantik als andere Spaltentypen.Also
varchar(MAX)
wirklich bedeutetvarchar(AS_MUCH_AS_I_WANT_TO_STUFF_IN_HERE_JUST_KEEP_GROWING)
und nichtvarchar(MAX_SIZE_OF_A_COLUMN)
.MySql hat keine äquivalente Sprache.
Um die gleiche Speichermenge wie
varchar(max)
in MySql zu erhalten, müssten Sie immer noch auf einen Spaltentyp zurückgreifenBLOB
. Dieser Artikel beschreibt eine sehr effektive Methode zum effizienten Speichern großer Datenmengen in MySQL.quelle
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.
quelle
Für SQL Server
Tabelle ändern prg_ar_report_colors Text_Color_Code hinzufügen VARCHAR (max);
Für MySql
alter table prg_ar_report_colors add Text_Color_Code longtext;
Für Oracle
Tabelle ändern prg_ar_report_colors Text_Color_Code CLOB hinzufügen;
quelle
MySQL Konvertieren der Spalte von VARCHAR in TEXT unter Grenzgröße !!!
quelle
Die maximale Länge eines Varchars in MySQL 5.6.12 beträgt 4294967295.
quelle