Heim  >  Artikel  >  Datenbank  >  Prinzipien zur Auswahl der Datentypen char und varchar in MySQL

Prinzipien zur Auswahl der Datentypen char und varchar in MySQL

黄舟
黄舟Original
2017-03-01 13:34:291586Durchsuche


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.

Vergleich von char und varchar

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-Speicher-Engine

MyISAM-Datentabelle, es ist am besten, Datenspalten mit fester Länge anstelle von Datenspalten mit variabler Länge zu verwenden.

InnoDB-Speicher-Engine

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-Speicher-Engine

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.

Missverständnis

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


Stellungnahme:
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