Heim > Datenbank > MySQL-Tutorial > Hauptteil

Hat MySQL Varchar2?

青灯夜游
Freigeben: 2023-03-30 11:05:17
Original
3017 Leute haben es durchsucht

MySQL hat kein Varchar2, nur Varchar. VARCHAR stellt eine Zeichenfolge variabler Länge dar, die bis zu 65.535 Zeichen lang sein kann; MySQL behandelt VARCHAR-Werte als Präfix mit einer Länge von 1 Byte oder 2 Byte plus den tatsächlichen Daten. VARCHAR2 ist ein Oracle-Typ, der eine Zeichenfolge variabler Länge darstellt und Werte von 1 bis 4000 Byte speichern kann, was bedeutet, dass für einen Einzelbyte-Zeichensatz bis zu 4000 Zeichen in einer VARCHAR2-Spalte gespeichert werden können.

Hat MySQL Varchar2?

Die Betriebsumgebung dieses Tutorials: Windows7-System, MySQL8-Version, Dell G3-Computer.

Mysql hat kein Varchar2, nur Oracle hat Varchar2, was die Bytelänge darstellt, die vom Zeichensatz der Datenbank abhängt.

MySQLs Varchar-Typ

VARCHAR ist eine Zeichenfolge variabler Länge, deren Länge 65.535 Zeichen erreichen kann. MySQL behandelt VARCHAR-Werte als Präfix mit einer Länge von 1 Byte oder 2 Byte plus den tatsächlichen Daten.

Das Längenpräfix gibt die Anzahl der Bytes des Werts an. Wenn die Spalte weniger als 255 Byte benötigt, beträgt das Längenpräfix 1 Byte. Wenn die Spalte mehr als 255 Bytes benötigt, beträgt das Längenpräfix zwei Längenbytes.

Allerdings ist die maximale Länge durch die maximale Zeilengröße (65.535 Bytes) und den verwendeten Zeichensatz begrenzt. Das bedeutet, dass die Gesamtlänge aller Spalten weniger als 65.535 Byte betragen sollte.

Sehen wir uns unten ein Beispiel an.

Erstellen Sie eine neue Tabelle mit zwei Spalten s1 und s2 und einer Länge von 32765 (Längenpräfix +2) bzw. 32766 (+2). Beachten Sie, dass 32765 + 2 + 32766 + 2 = 65535 ist, was der maximalen Zeilengröße entspricht.

USE testdb;

CREATE TABLE IF NOT EXISTS varchar_test (
    s1 VARCHAR(32765) NOT NULL,
    s2 VARCHAR(32766) NOT NULL
)  CHARACTER SET 'latin1' COLLATE LATIN1_DANISH_CI;
Nach dem Login kopieren

Diese Anweisung hat die Tabelle erfolgreich erstellt. Wenn wir jedoch die Länge der Spalte s1 um 1 erhöhen.

USE testdb;
CREATE TABLE IF NOT EXISTS varchar_test_2 (
    s1 VARCHAR(32766) NOT NULL, -- error
    s2 VARCHAR(32766) NOT NULL
)  CHARACTER SET 'latin1' COLLATE LATIN1_DANISH_CI;
Nach dem Login kopieren

MySQL gibt eine Fehlermeldung aus:

Error Code: 1118. 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 0.000 sec
Nach dem Login kopieren

Wie oben gezeigt, ist die Zeilenlänge zu groß, sodass die Erstellungsanweisung fehlgeschlagen ist.

MySQL gibt einen Fehler aus, wenn Sie eine Zeichenfolge einfügen, deren Länge größer als die Länge der VARCHAR-Spalte ist. Betrachten Sie das folgende Beispiel:

USE testdb;

CREATE TABLE items (
    id INT PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(3)
);

INSERT INTO items(title)
VALUES('ABCD');
Nach dem Login kopieren

In diesem Beispiel gibt MySQL die folgende Fehlermeldung aus:

1406 - Data too long for column 'title' at row 1
Nach dem Login kopieren

oracle’s varchar2 type

Um Zeichenfolgen variabler Länge zu speichern, können Sie den Oracle VARCHAR2-Datentyp verwenden. VARCHAR2-Spalten können Werte von 1 bis 4000 Byte speichern. Das bedeutet, dass für einen Einzelbyte-Zeichensatz bis zu 4000 Zeichen in einer VARCHAR2-Spalte gespeichert werden können.

Beim Erstellen einer Tabelle mit einer VARCHAR2-Spalte muss die maximale Zeichenfolgenlänge in Bytes angegeben werden:

VARCHAR2(max_size BYTE)
Nach dem Login kopieren

oder in Zeichen -

VARCHAR2(max_size CHAR)
Nach dem Login kopieren

Wenn standardmäßig kein BYTE oder CHAR explizit nach max_size angegeben wird, verwendet Oracle BYTE. Mit anderen Worten: Eine VARCHAR2(N)-Spalte kann bis zu N Bytes an Zeichen enthalten.

Oracle gibt einen Fehler aus, wenn Sie eine Zeichenfolge speichern, deren Größe die maximale Länge einer VARCHAR2-Spalte überschreitet.

Wenn Sie beispielsweise eine VARCHAR2-Spalte mit einer maximalen Länge von 20 definieren, können Sie bis zu 20 Zeichen in einem Einzelbyte-Zeichensatz speichern. Wenn 21 oder mehr Zeichen gespeichert sind, gibt Oracle einen Fehler zurück.

Wenn Sie außerdem 10 Zeichen in einer VARCHAR2(20)-Spalte speichern, verwendet Oracle nur 10 Bytes für die Speicherung statt 20 Bytes. Daher kann die Verwendung des Datentyps VARCHAR2 Ihnen helfen, den von Ihrer Tabelle beanspruchten Platz zu sparen.

Beim Vergleich von VARCHAR2-Werten verwendet Oracle eine nicht aufgefüllte Vergleichssemantik.

Maximale Länge von VARCHAR2

Ab Oracle 12c beträgt die maximale Länge, die der Datentyp VARCHAR2 haben kann, 32767. Oracle verwendet den Parameter MAX_STRING_SIZE, um die maximale Länge zu steuern. Wenn MAX_STRING_SIZE STANDARD ist, beträgt die maximale Größe von VARCHAR2 4000 Bytes. Wenn MAX_STRING_SIZE EXTENDED ist, beträgt die Größenbeschränkung von VARCHAR2 32767.

Um den Wert des Parameters MAX_STRING_SIZE zu erhalten, verwenden Sie bitte die folgende Abfrage:

SELECT
    name,
    value
FROM
    v$parameter
WHERE
    name = 'max_string_size';
Nach dem Login kopieren

Führen Sie die obige Abfrageanweisung aus und erhalten Sie die folgenden Ergebnisse -

SHOW PARAMETER max_string_size;
Nach dem Login kopieren

[Verwandte Empfehlungen: MySQL-Video-Tutorial]

Das obige ist der detaillierte Inhalt vonHat MySQL Varchar2?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!