Einige Dinge, die Sie über den Varchar-Typ in MySQL wissen sollten

Einige Dinge, die Sie über den Varchar-Typ in MySQL wissen sollten

Speicherregeln für varchar

In Versionen unter 4.0 bedeutet varchar(20) 20 Bytes. Wenn Sie chinesische UTF8-Zeichen speichern, können Sie nur 6 speichern (3 Bytes für jedes chinesische Zeichen).
In Version 5.0 und höher bedeutet varchar (20) 20 Zeichen. Unabhängig davon, ob es sich um Zahlen, Buchstaben oder chinesische UTF8-Zeichen handelt (jedes chinesische Zeichen ist 3 Byte groß), können 20 Zeichen gespeichert werden und die maximale Größe beträgt 65532 Byte.
Das varchar-Feld speichert den eigentlichen Inhalt separat außerhalb des gruppierten Indexes, und der Anfang des Inhalts verwendet 1 bis 2 Bytes, um die tatsächliche Länge anzugeben.
In der offiziellen Erklärung heißt es:

Werte in VARCHAR-Spalten sind Zeichenfolgen mit variabler Länge. Die Länge kann vor MySQL 5.0.3 als Wert von 0 bis 255 und in 5.0.3 und späteren Versionen von 0 bis 65.535 angegeben werden.
Im Gegensatz zu CHAR werden VARCHAR-Werte als ein oder zwei Byte langes Präfix plus Daten gespeichert. Das Längenpräfix gibt die Anzahl der Bytes im Wert an.
Eine Spalte nutzt ein Längenbyte, wenn die Werte nicht mehr als 255 Bytes benötigen, zwei Längenbytes, wenn die Werte mehr als 255 Bytes benötigen können.

Unterschied zwischen varchar und char

Unterschied 1: Feste Länge und variable Länge

char bedeutet feste Länge und varchar bedeutet variable Länge. Wenn die eingefügte Zeichenfolge ihre Länge überschreitet, wird dies der Situation entsprechend behandelt. Im strikten Modus wird die Einfügung abgelehnt und eine Fehlermeldung angezeigt. Im lockeren Modus wird sie abgefangen und dann eingefügt. Wenn die Länge der eingefügten Zeichenfolge kleiner als die definierte Länge ist, wird sie anders behandelt, z. B. char(10), was bedeutet, dass 10 Zeichen gespeichert werden. Egal, wie viele Zeichen Sie einfügen, es werden 10 sein. Wenn es weniger als 10 sind, wird es mit Leerzeichen aufgefüllt. Wenn varchar(10) kleiner als 10 ist, werden so viele Zeichen gespeichert, wie eingefügt wurden.
Woher kennt varchar die Länge der gespeicherten Zeichenfolge? Tatsächlich werden für ein varchar-Feld ein (wenn die Zeichenfolge weniger als 255 beträgt) oder zwei Bytes (wenn die Länge mehr als 255 beträgt) benötigt, um die Länge der Zeichenfolge zu speichern. Er benötigt jedoch ein Präfix, um die spezifische Anzahl von Bytes anzugeben (da varchar eine variable Länge hat, weiß er ohne diesen Längenwert nicht, wie er die Daten lesen soll).

Der zweite Unterschied ist die Speicherkapazität.

Bei char beträgt die maximale Anzahl speicherbarer Zeichen 255, unabhängig von der Kodierung.
Und varchar kann bis zu 65532 Zeichen speichern. Die maximale effektive Länge eines VARCHAR wird durch die maximale Zeilengröße und den verwendeten Zeichensatz bestimmt. Die maximale Gesamtlänge beträgt 65.532 Bytes

Längenbeschränkung für VARCHAR-Kodierung

Wenn der Zeichentyp gbk ist, belegt jedes Zeichen höchstens 2 Bytes und die maximale Länge kann 32766 nicht überschreiten. Wenn der Zeichentyp utf8 ist, belegt jedes Zeichen höchstens 3 Bytes und die maximale Länge kann 21845 nicht überschreiten. Wenn der oben genannte Grenzwert während der Definition überschritten wird, wird das VARCHAR-Feld zwangsweise in den Texttyp konvertiert und eine Warnung generiert.

Zeilenlängenbeschränkung

Der Grund für die VarChar-Längenbeschränkung in praktischen Anwendungen ist die Länge einer Zeilendefinition. MySQL erfordert, dass die Definitionslänge einer Zeile 65535 nicht überschreiten darf. Wenn die angegebene Tabellenlänge diesen Wert überschreitet, wird FEHLER 1118 (42000): Zeilengröße zu groß angezeigt. Die maximale Zeilengröße für den verwendeten Tabellentyp (ohne BLOBs) beträgt 65535. Sie müssen einige Spalten in TEXT oder BLOBs ändern.
Das heißt, wenn Sie beispielsweise eine Tabelle mit zwei Feldern vom Typ varhcar in der Tabellenstruktur erstellen, darf die Gesamtlänge dieser beiden Felder 65535 nicht überschreiten.
Die offizielle Beschreibung lautet wie folgt:

Jede Tabelle hat eine maximale Zeilengröße von 65.535 Bytes.
Dieses Maximum gilt für alle Speicher-Engines, eine bestimmte Engine kann jedoch zusätzliche Einschränkungen aufweisen, die zu einer geringeren effektiven maximalen Zeilengröße führen.

Kontrollbit von varchar

Der Varchar-Zeichentyp in MySQL reserviert auch 1 Byte für andere Steuerinformationen.

Beispiel

Beispiel 1: Wenn eine Tabelle nur ein Feld vom Typ VARCHAR(N) und mit UTF-8-Kodierung hat, was ist der Maximalwert von N?

Beispiel: Erstellen Sie die Tabelle tb_name1 (ein varchar(N)), Standard-Zeichensatz = utf8, dann ist der Maximalwert von N = (65535-1-2)/3 = 21844.
Der Grund für das Minus 1 liegt darin, dass die eigentliche Zeilenspeicherung erst beim zweiten Byte beginnt.
Der Grund für das Subtrahieren von 2 besteht darin, dass die 2 Bytes im Varchar-Header die Länge darstellen.
Der Grund für die Division durch 3 ist, dass die Zeichenkodierung UTF-8 ist.
SQL-Test:

Erstellen Sie Tabelle tb_name1 (ein varchar(21844)) Standard-Zeichensatz=utf8;
Abfrage OK, 0 Zeilen betroffen (0,38 Sek.)

Tabelle tb_name1 löschen;
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)

Erstellen Sie Tabelle tb_name1 (ein varchar(21845)) Standard-Zeichensatz=utf8;
FEHLER 1118 (42000): Zeilengröße zu groß. Die maximale Zeilengröße für den verwendeten Tabellentyp, BLOBs nicht mitgerechnet, beträgt 65535. Sie müssen einige Spalten ändern

Beispiel 2: Wenn eine Tabelle ein Feld vom Typ VARCHAR(N) und andere in UTF-8 codierte Feldtypen hat, was ist der Maximalwert von N?

Beispiel: create table tb_name2(a int, b char(20), c varchar(N)) default charset=utf8;
Dann: Maximalwert von N = (65535-1-2-4-203)/3 = 21822
Der Grund für das Minus 1 liegt darin, dass die eigentliche Zeilenspeicherung erst beim zweiten Byte beginnt.
Der Grund für das Subtrahieren von 2 besteht darin, dass die 2 Bytes im Varchar-Header die Länge darstellen.
Der Grund für das Subtrahieren von 4 besteht darin, dass der Int-Typ des Felds a 4 Bytes belegt.
Der Grund für das Subtrahieren von 203 besteht darin, dass char(20) 60 Bytes einnimmt und die Kodierung utf8 ist.

SQL-Test:

Erstellen Sie Tabelle tb_name2 (a int, b char (20), c varchar (21822)). Standard-Zeichensatz = utf8.
Abfrage OK, 0 Zeilen betroffen (0,28 Sek.)

Tabelle tb_name2 löschen;
Abfrage OK, 0 Zeilen betroffen (0,20 Sek.)

Erstellen Sie Tabelle tb_name2 (a int, b char (20), c varchar (21823)). Standard-Zeichensatz = utf8.
FEHLER 1118 (42000): Zeilengröße zu groß. Die maximale Zeilengröße für den verwendeten Tabellentyp, BLOBs nicht mitgerechnet, beträgt 65535. Sie müssen einige Spalten in TEXT oder BLOBs ändern.

Beispiel 3: Wenn eine Tabelle mehrere Felder vom Typ VARCHAR(N) und andere Feldtypen mit GBK-Kodierung hat, was ist der Maximalwert von N?

Beispiel: create table tb_name3(a int, b char(20), c varchar(50), d varchar(N)) default charset=gbk;
Dann: Maximalwert von N = (65535-1-1-2-4-202-502)/2 = 32693
Der Grund für das erste Minus 1 liegt darin, dass die eigentliche Zeilenspeicherung beim zweiten Byte beginnt.
Das zweite Minus 1 bedeutet, dass der zweite varchar(50) einen 1-Byte-Header hat, der die Länge angibt (weniger als 255).
Der Grund für das Subtrahieren von 2 besteht darin, dass die 2 Bytes im Varchar-Header die Länge darstellen.
Der Grund für das Subtrahieren von 202 besteht darin, dass char(20) 40 Bytes einnimmt und die Kodierung gbk ist.
Der Grund für das Subtrahieren von 502 besteht darin, dass varchar(50) 100 Bytes einnimmt und die Kodierung gbk ist.

SQL-Test:

Erstelle Tabelle tb_name3(a int, b char(20), c varchar(50), d varchar(32694)) Standard-Zeichensatz=gbk;
FEHLER 1118 (42000): Zeilengröße zu groß. Die maximale Zeilengröße für den verwendeten Tabellentyp, BLOBs nicht mitgerechnet, beträgt 65535. Sie müssen einige Spalten in TEXT oder BLOBs ändern.
Erstelle Tabelle tb_name3(a int, b char(20), c varchar(50), d varchar(32693)) Standard-Zeichensatz=gbk;
Abfrage OK, 0 Zeilen betroffen (0,18 Sek.)

Oben sind einige Details zu einigen Punkten aufgeführt, die beim Varchar-Typ in MySQL beachtet werden müssen. Weitere Informationen zum Varchar-Typ in MySQL finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Methode zum Vergleichen der Größe von Varchar-Typnummern in einer MySQL-Datenbank
  • Der Unterschied zwischen den Feldtypen char, varchar und Text in MySQL
  • Beispieloperation für die Summe des Mysql-Varchar-Typs
  • Ausführliche Erläuterung des MySQL-Datentyps varchar
  • Implementierung von Vergleichen, Sortieren und anderen Operationen für Daten vom Typ varchar in MySQL

<<:  XHTML-Einführungstutorial: Textformatierung und Sonderzeichen

>>:  Eine kurze Diskussion über die VUE Uni-App-Entwicklungsumgebung

Artikel empfehlen

Implementierung eines Docker-Compose-Bereitstellungsprojekts basierend auf MySQL8

1. Erstellen Sie zunächst den entsprechenden Ordn...

Preistabelle mit CSS3 implementiert

Ergebnis: Implementierungscode html <div id=&q...

JavaScript-Verlaufsobjekt erklärt

Inhaltsverzeichnis 1. Routennavigation 2. API zur...

So berechnen Sie mit Linux den von zeitgesteuerten Dateien belegten Speicherplatz

Öffnen Sie den Editor für geplante Aufgaben. Cent...

Detaillierte Erklärung, wann Javascript-Skripte ausgeführt werden

JavaScript-Skripte können überall in HTML eingebe...

Eine einfache Implementierungsmethode für eine digitale LED-Uhr in CSS3

Das dürfte etwas sein, was viele Leute gemacht ha...

Detaillierte Schritte zum Debuggen von VUE-Projekten in IDEA

Um JS-Code zu debuggen, müssen Sie jedes Mal eine...

Verwenden Sie vue2+elementui für Hover-Prompts

Die Hover-Prompts von Vue2+elementui sind in exte...

Zabbix-Überwachungslösung – die neueste offizielle Version 4.4 [empfohlen]

Zabbix 12.10.2019 Chenxin siehe https://www.zabbi...

MySQL-Löschfunktion für Mehrfachtabellenverbindungen

Löschen einer einzelnen Tabelle: LÖSCHEN AUS Tabe...

Vue implementiert die Bottom-Query-Funktion

In diesem Artikelbeispiel wird der spezifische Co...