Viele Orte ignorieren häufig die Speicher-Engine, wenn sie die Prinzipien der Auswahl der char- und varchar-Datentypen analysieren. Tatsächlich sollten wir anhand der ausgewählten Speicher-Engine bestimmen, wie der geeignete Datentyp ausgewählt wird.
值 | char(3) | 实际存储字符长度 | varchar(3) | 实际存储字符长度 |
---|---|---|---|---|
” | ’ ‘ | 3 | ” | 1 |
‘ab’ | ‘ab ‘ | 3 | ‘ab’ | 3 |
‘abc’ | ‘abc’ | 3 | ‘abc’ | 4 |
‘abcdefg’ | ‘abc’ | 3 | ‘abc’ | 4 |
Zusammenfassung: Wie aus der obigen Tabelle ersichtlich ist, hat char eine feste Länge.
Char ist ein Typ mit fester Länge, varchar ist ein Typ ohne feste Länge und varchar ist ein Typ mit variabler Länge. Jemand fragt sich vielleicht, warum die Länge von Varchar größer ist als die Datenlänge? Weil VARCHAR mit einem ein Byte oder zwei Byte langen Präfix + Daten gespeichert wird. Wenn die deklarierte Länge der VARCHAR-Spalte größer als 255 ist, beträgt das Längenpräfix zwei Bytes, andernfalls ein Byte.
MyISAM-Datentabelle, es ist am besten, Datenspalten mit fester Länge anstelle von Datenspalten mit variabler Länge zu verwenden.
Es wird empfohlen, den Typ VARCHAR zu verwenden.
Für InnoDB-Datentabellen unterscheidet das interne Zeilenspeicherformat nicht zwischen Spalten fester Länge und Spalten variabler Länge (alle Datenzeilen verwenden Kopfzeiger, die auf Datenspaltenwerte zeigen), daher ist die Verwendung von CHAR-Spalten fester Länge im Wesentlichen der Fall Nicht unbedingt einfacher als die Verwendung von VARCHAR-Spalten variabler Länge. Daher ist der Hauptleistungsfaktor die Gesamtspeichermenge, die von den Datenzeilen verwendet wird. Da CHAR im Durchschnitt mehr Platz einnimmt als VARCHAR, ist es besser, VARCHAR zu verwenden, um den Gesamtspeicher und die Festplatten-E/A der zu verarbeitenden Datenzeilen zu minimieren.
MEMORY-Datentabellen verwenden derzeit Datenzeilenspeicher mit fester Länge, daher spielt es keine Rolle, ob Sie CHAR- oder VARCHAR-Spalten verwenden. Beide werden als CHAR-Typen behandelt.
1. Wir alle wissen, dass utf-8 Chinesisch 3 Bytes und gbk zwei Bytes belegt. Kann varchar(20) also nur 20 Zeichen speichern? 6 chinesische Schriftzeichen speichern?
A: Das ist nicht der Fall (im Internet heißt es, dass Versionen vor 5.0 so waren, aber es gibt keinen Test). MySQL Varchar (20) kann 20 in Chinesisch und Englisch speichern, aber die maximale Länge des Varchar-Felds hängt von der Codierung ab. Wenn es UTF-8 ist, beträgt es ungefähr 65535/3, wenn es GBK ist ungefähr 65535/2
Viele Orte ignorieren häufig die Speicher-Engine, wenn sie die Prinzipien der Auswahl der Datentypen char und varchar analysieren. Tatsächlich sollten wir anhand der ausgewählten Speicher-Engine bestimmen, wie der geeignete Datentyp ausgewählt wird.
Das Obige ist der Inhalt der Auswahlprinzipien der Datentypen char und varchar in MySQL. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn).