CHAR- und VARCHAR-Typen sind ähnlich und unterscheiden sich hauptsächlich in der Speicherung, den nachstehenden Leerzeichen und den Abrufmethoden. Die Ähnlichkeiten zwischen CHAR und VARCHAR sind: Sowohl CHAR als auch VARCHAR geben die Zeichenlänge an. Beachten Sie, dass es sich um die Zeichenlänge handelt. Beispielsweise können char(30) und varchar(30) beide 30 Zeichen speichern. Zu beachten ist, dass bei der UTF8MB4-Kodierung jedes Zeichen 4 Knoten belegt. In UTF8 benötigt jedes Zeichen 3 Bytes. Wenn die zu speichernden Zeichen die durch CHAR/VARCHAR angegebene Maximallänge überschreiten. Wenn der SQL-Modus nicht aktiviert ist, wird die zu speichernde Zeichenfolge abgeschnitten und nur die ersten 30 Zeichen werden gespeichert. Die Werte in einer CHAR-Spalte sind Zeichenfolgen mit fester Länge. Die Länge kann als Wert zwischen 0 und 255 Zeichen angegeben werden (z.B. utf8mb4: 0-255*4 Bytes). Wenn CHAR zum Speichern von Zeichen verwendet wird, wird beispielsweise CHAR(30) als Beispiel verwendet. Wenn die Länge weniger als 30 Zeichen beträgt, wird rechts mit Leerzeichen aufgefüllt. Beim Abrufen von CHAR-Werten werden nachstehende Leerzeichen entfernt, sofern nicht der SQL-Modus sqlmode:PAD_CHAR_TO_FULL-LENGTH aktiviert ist. Die Werte in einer VARCHAR-Spalte sind Zeichenfolgen mit variabler Länge. Die Länge kann als Wert zwischen 0 und 65535 Byte angegeben werden. Die effektive Maximallänge eines VARCHAR hängt von der maximalen Zeilengröße (65535 Bytes, gemeinsam für alle Spalten) und dem verwendeten Zeichensatz ab. Im Gegensatz zu CHAR speichert VARCHAR beim Speichern von Daten zusätzliche 1-2 Bytes (beispielsweise werden diese 1-2 Bytes bei varchar(4) nicht zur 4-Zeichen-Länge gezählt, sodass Sie sich keine Gedanken über das Abschneiden machen müssen). Diese 1-2 Bytes werden verwendet, um die Länge der Datenzeichen aufzuzeichnen. Wenn die Datenzeichenlänge kleiner oder gleich 255 ist, verwenden Sie 1 Byte zum Aufzeichnen der Datenlänge. Ist er größer, werden zwei Bytes verwendet. CHAR speichert nur die Daten selbst. Wie in der Abbildung unten gezeigt. (Mythos: varchar ist bei Abfragen langsamer als char, da die Bytelänge von varchar (X) berechnet wird) Bei der Latin1-Kodierung kann Latin1 keine chinesischen Schriftzeichen speichern. Englische Buchstaben bestehen aus 1 Byte.
Beachten Sie, dass VARCHAR-Werte beim Speichern nicht mit Leerzeichen aufgefüllt werden. Beim Speichern und Abrufen von Werten bleiben nachstehende Leerzeichen gemäß Standard-SQL erhalten. Bei CHAR ist es das Gegenteil. CHAR wird beim Speichern mit Leerzeichen aufgefüllt und die nachstehenden Leerzeichen werden beim Abrufen entfernt, unabhängig davon, ob die nachstehenden Leerzeichen automatisch ausgefüllt werden oder in den Daten selbst enthalten sind. Zum Beispiel: mysql> CREATE TABLE vc (v VARCHAR(4), c CHAR(4)); Abfrage OK, 0 Zeilen betroffen (0,01 Sek.) mysql> INSERT INTO vc VALUES ('ab ', 'ab '); Abfrage OK, 1 Zeile betroffen (0,00 Sek.) mysql> SELECT CONCAT('(', v, ')'), CONCAT('(', c, ')') FROM vc; +---------------------+---------------------+ | CONCAT('(', v, ')') | CONCAT('(', c, ')') | +---------------------+---------------------+ | (ab ) | (ab) | +---------------------+---------------------+ 1 Zeile im Satz (0,06 Sek.)<br><br><br> Machen Sie drei Experimente. mysql> anzeigen, Tabelle erstellen vc; +-------+-------------------------------------------------------------------------------------------------------------------------------------------+ | Tabelle | Tabelle erstellen | +-------+-------------------------------------------------------------------------------------------------------------------------------------------+ | vc | TABELLE ERSTELLEN `vc` ( `v` varchar(4) DEFAULT NULL, `c` char(4) DEFAULT NULL, EINZIGARTIGER SCHLÜSSEL `v_UNIQUE` (`v`) ) ENGINE=InnoDB STANDARD-CHARSET=utf8mb4 | +-------+-------------------------------------------------------------------------------------------------------------------------------------------+ 1 Zeile im Satz (0,00 Sek.) 1. Abfrageanweisung, wobei Feld = „ab“ ist; mysql> SELECT concat('(',v, ')'),concat('(',c, ')') FROM vc, wobei v=' ab '; Leerer Satz (0,00 Sek.) mysql> SELECT concat('(',v, ')'),concat('(',c, ')') FROM vc, wobei c=' ab '; Leerer Satz (0,00 Sek.) 2. Abfrageanweisung, wobei Feld = 'ab '; mysql> SELECT concat('(',v, ')'),concat('(',c, ')') FROM vc where v='ab '; +--------------------+--------------------+ | concat('(',v, ')') | concat('(',c, ')') | +--------------------+--------------------+ | (ab ) | (ab) | +--------------------+--------------------+ 1 Zeile im Satz (0,00 Sek.) mysql> SELECT concat('(',v, ')'),concat('(',c, ')') FROM vc where c='ab '; +--------------------+--------------------+ | concat('(',v, ')') | concat('(',c, ')') | +--------------------+--------------------+ | (ab ) | (ab) | +--------------------+--------------------+ 1 Zeile im Set (0,00 Sek.)<br><br><br>Bei allen Zeichenfolgenvergleichen, egal ob varchar, text oder char, werden nachstehende Leerzeichen ignoriert, mit Ausnahme der like-Klausel, die nachstehende Leerzeichen nicht entfernt, wie unten gezeigt<br><br> mysql> SELECT concat('(',v, ')'),concat('(',c, ')') FROM vipshop_dba.vc, wobei c wie 'ab' ist; (kein Leerzeichen am Ende) +--------------------+--------------------+ | concat('(',v, ')') | concat('(',c, ')') | +--------------------+--------------------+ | (ab ) | (ab) | | ( ab ) | ( ab ) | +--------------------+--------------------+ 2 Zeilen im Satz (0,00 Sek.) mysql> SELECT concat('(',v, ')'),concat('(',c, ')') FROM vipshop_dba.vc, wobei c wie 'ab '; (mit abschließendem Leerzeichen) ist Leerer Satz (0,00 Sek.) CHAR wird beim Speichern mit Leerzeichen aufgefüllt und nachstehende Leerzeichen werden beim Abrufen entfernt, unabhängig davon, ob die nachstehenden Leerzeichen automatisch aufgefüllt werden oder Teil der Daten selbst sind. Diese Aktion zum Entfernen des nachstehenden Leerzeichens erfolgt vor dem Vergleich mysql> SELECT concat('(',v, ')'),concat('(',c, ')') FROM vipshop_dba.vc, wobei v wie 'ab ' ist; (es gibt ein nachstehendes Leerzeichen). +--------------------+--------------------+ | concat('(',v, ')') | concat('(',c, ')') | +--------------------+--------------------+ | (ab ) | (ab) | +--------------------+--------------------+ 1 Zeile im Satz (0,01 Sek.) mysql> SELECT concat('(',v, ')'),concat('(',c, ')') FROM vipshop_dba.vc, wobei v wie 'ab' ist; (kein Leerzeichen am Ende) Leerer Satz (0,00 Sek.) 3. Legen Sie einen eindeutigen Index für varchar fest, um zu sehen, ob ‚ab‘ und ‚ab‘ gleichzeitig vorhanden sein können mysql> einfügen in vc (v,c)values('ab ', 'ab ') -> ; FEHLER 1062 (23000): Doppelter Eintrag „ab“ für Schlüssel „v_UNIQUE“ mysql> einfügen in vc (v,c)values(' ab ', 'ab ') -> ; Abfrage OK, 1 Zeile betroffen, 1 Warnung (0,00 Sek.)<br>Dies weist darauf hin, dass zwar der nachstehende Leerraum von varchar beibehalten werden kann, dem Index jedoch zusätzliche Beschränkungen auferlegt zu sein scheinen. Wenn varchar ein eindeutiger Index ist und sich die eingefügten Werte nur in der Anzahl der nachstehenden Leerzeichen unterscheiden, wird ein doppelter Schlüssel gemeldet. Apropos Byte-Grenzen: Ich möchte Sie auch daran erinnern. Auch die Indexlänge ist begrenzt: Die Länge jeder Indexspalte der InnoDB-Engine ist auf 767 Byte begrenzt und die Gesamtlänge aller Indexspalten kann 3072 Byte nicht überschreiten. Beachten Sie, dass es sich um Bytes handelt. Die Byteberechnung von varchar(256) ist in verschiedenen Kodierungen unterschiedlich. Beispielsweise belegt in utf8mb4 ein Zeichen 4 Bytes und 256 Zeichen = 1024 Bytes. Der Effekt einer Indexabdeckung kann nicht erreicht werden. Dies entspricht der Erstellung eines Präfixindexes (sehr wichtig, der Präfixindex muss für die sekundäre Abfrage an die (Primärschlüssel-)Tabelle zurückgegeben werden). Die InnoDB-Engine kann die Längenbeschränkung einer einzelnen Indexspalte auf 3072 Bytes erhöhen, indem sie innodb_large_prefix=on konfiguriert (globaler Parameter, dynamisch wirksam).
Oben finden Sie detaillierte Informationen zum Unterschied zwischen char und varchar in MySQL. Weitere Informationen zu char und varchar in MySQL finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: Implementierung einer zirkulären Scroll-Listenfunktion basierend auf Vue
>>: Verwendung des Linux-Befehls gzip
Weil ich in diesem Fall das Wort Übergang falsch ...
In diesem Artikelbeispiel wird der spezifische Co...
Kürzlich hat Microsoft das Serversystem 2019 verö...
Vorwort Als ich zuvor zu einem Vorstellungsgesprä...
Überprüfen Sie, was in MySQL installiert ist grep...
Bisher konnte react.forwardRef nicht auf höherwer...
Inhaltsverzeichnis UNION Tabelleninitialisierung ...
Inhaltsverzeichnis 1. Warenkorb-Beispiel 2. Code-...
Ich glaube, dass Studenten, die etwas über die Do...
In einigen Szenarien möchten wir derselben Ethern...
Inhaltsverzeichnis Was ist ein Webcontainer? Die ...
Inhaltsverzeichnis Vorne geschrieben 1. Ngixn-Bil...
Es gibt zwei Möglichkeiten, MySQL unter Linux zu ...
In diesem Artikel finden Sie das Installations- u...