Frage

Was ist das Äquivalent von varchar (max) in MySQL?

War es hilfreich?

Lösung

Die maximale Länge eines VARCHAR unterliegt die max Zeilengröße in MySQL, die 64 KB (nicht BLOBs gezählt):

VARCHAR(65535)

Beachten Sie jedoch, dass der Grenzwert niedriger ist, wenn Sie einen Multi-Byte-Zeichensatz verwenden:

VARCHAR(21844) CHARACTER SET utf8

Hier sind einige Beispiele:

Die maximale Zeilengröße ist 65535, aber ein VARCHAR umfasst auch ein oder zwei Byte, die Länge einer gegebenen Zeichenkette zu kodieren. So kann man eigentlich keine varchar der maximalen Zeilengröße erklären, auch wenn es 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 aber abnehmende Längen versuchen, finden wir die größte Länge, die funktioniert:

mysql> CREATE TABLE foo ( v VARCHAR(65532) );
Query OK, 0 rows affected (0.01 sec)

Nun, wenn wir versuchen, einen Multibyte charset auf Tabellenebene zu verwenden, finden wir, dass es jedes Zeichen als mehrere Bytes zählt. UTF8 Strings nicht unbedingt verwenden, um mehrere Bytes pro String, aber MySQL kann man nicht davon ausgehen, werden alle zukünftigen Einsätze auf Single-Byte-Zeichen 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 allem, was der letzte Fehler sagte uns, InnoDB noch nicht eine Länge von 21.845 mag.

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

Das macht Sinn, wenn Sie berechnen, dass 21845 * 3 = 65535, die ohnehin nicht gearbeitet hätte. Während 21844 * 3 = 65532, die Arbeit der Fall ist.

mysql> CREATE TABLE foo ( v VARCHAR(21844) ) CHARSET=utf8;
Query OK, 0 rows affected (0.32 sec)

Andere Tipps

Was ist VARCHAR (max)?

varchar(max) ist eine Funktion von Microsoft SQL Server.

Die Datenmenge, die eine Spalte in Microsoft SQL Server-Versionen speichern konnte vor Version 2005 auf 8 KB begrenzt. Um mehr als 8 KB speichern Sie Arten TEXT, NTEXT oder BLOB Spalten verwenden hätten, diese Spaltentypen ihre Daten als eine Sammlung von 8K-Seiten gespeichert, getrennt von der den Tabellendatenseite; Sie stützten pro Zeile bis zu 2 GB speichern.

Der große Nachteil dieser Spaltentypen war, dass sie in der Regel spezielle Funktionen und Anweisungen für den Zugriff auf und ändern Sie die Daten (z READTEXT, WRITETEXT und UPDATETEXT)

In SQL Server 2005, varchar(max) wurde eingeführt, um die Daten und Abfragen zu vereinen verwendet abzurufen und Daten in großen Spalten zu ändern. Die Daten für varchar(max) Spalten wird inline mit den Tabellendatenseiten gespeichert.

Da die Daten in der MAX-Spalte eine 8 KB Datenseite füllen eine Überlaufseite zugeordnet ist und die vorherige Seite verweist auf eine verknüpfte Liste zu bilden. Im Gegensatz zu TEXT, NTEXT und BLOB des varchar(max) Spaltentypen unterstützt alle die gleiche Abfragesemantik als andere Spaltentypen.

So 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).

MySql kein gleichwertiges Idiom hat.

Um die gleiche Menge an Speicher als varchar(max) in MySql zu bekommen würden Sie noch an einen BLOB Spaltentyp zurückgreifen müssen. dieser Artikel diskutiert eine sehr effektive Methode, effizient große Mengen an Daten in MySql zu speichern.

Die maximale Länge eines varchar ist

65535

durch den max Bytelänge eines Zeichens im Zeichensatz der Spalt unterteilt sind auf (beispielsweise UTF-8 = 3-Bytes, ucs2 = 2, latin1 = 1).

minus 2 Bytes die Länge speichern

minus der Länge aller anderen Spalten

minus 1 Byte für alle 8 Spalten, die NULL-Werte zulassen sind. Wenn Ihre Spalte null ist / nicht null diese gespeichert wird als ein Bit in einem Byte / die Nullmaske, 1 Bit pro Spalte namens Bytes, die NULL-Werte zulässt.

für SQL Server

alter table prg_ar_report_colors Text_Color_Code VARCHAR (max) hinzuzufügen;

Für MySql

alter table prg_ar_report_colors hinzufügen Text_Color_Code long;

Für Oracle

alter table prg_ar_report_colors Text_Color_Code CLOB- hinzuzufügen;

Mysql Converting Spalte von VARCHAR, wenn sie unter Grenze Größe TEXT !!!

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>

Die maximale Länge eines varchar in MySQL 5.6.12 ist 4294967295.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top