Zu den MySQL-Datentypen gehören: BOOL, TINY INT, INT, BIG INT, FLOAT, DOUBLE, DECIMAL, CHAR, VARCHAR, TINY TEXT, TEXT, Date, DateTime, TimeStamp, Year usw.
1. MySQL-Datentypen
umfassen hauptsächlich die folgenden fünf Kategorien:
Ganzzahltypen: BIT, BOOL, TINY INT, SMALL INT, MEDIUM INT, INT, BIG INT
Gleitkommatypen: FLOAT, DOUBLE, DECIMAL
String-Typ: CHAR, VARCHAR, TINY TEXT, TEXT, MEDIUM TEXT, LONGTEXT, TINY BLOB, BLOB, MEDIUM BLOB, LONG BLOB
Datumstyp: Datum, DateTime, TimeStamp, Zeit, Jahr
Andere Daten Typen: BINARY, VARBINARY, ENUM, SET, Geometry, Point, MultiPoint, LineString, MultiLineString, Polygon, GeometryCollection usw.
1, Integer-Typ
MySQL-Datentyp
Bedeutung (vorzeichenbehaftet)
tinyint(m)
1-Byte-Bereich (-128~127)
smallint(m)
2-Byte-Bereich (-32768~32767)
mediumint(m)
3-Byte-Bereich ( -8388608~8388607)
int(m)
4-Byte-Bereich (-2147483648~2147483647)
bigint(m)
8-Byte-Bereich (+- 9,22*10 bis zum 18 Leistung)
Wenn unsigned zum Wertebereich hinzugefügt wird, wird der Maximalwert verdoppelt. Der Wertebereich von tinyint unsigned beträgt beispielsweise (0~256).
Das m in int(m) stellt die Anzeigebreite im SELECT-Abfrageergebnissatz dar. Es hat keinen Einfluss auf den tatsächlichen Wertebereich oder die Anzeigebreite. Ich weiß nicht, wozu dieses m dient.
2. Gleitkommatyp (Float und Double)
MySQL-Datentyp
Bedeutung
float(m,d)
Einzelpräzisions-Gleitkommatyp 8-Bit-Präzision (4 Bytes) Die Gesamtzahl der m, d Dezimalstellen
double(m,d)
Gleitkommatyp mit doppelter Genauigkeit, 16-Bit-Präzision (8 Bytes) Die Gesamtzahl der m, d Dezimalstellen
Angenommen, a Felddefinition Es ist float (6,3). Wenn Sie eine Zahl 123,45678 eingeben, ist die tatsächliche Zahl, die in der Datenbank gespeichert ist, 123,457, aber die Gesamtzahl unterliegt der tatsächlichen Zahl, also 6 Ziffern. Der ganzzahlige Teil besteht aus bis zu 3 Ziffern. Wenn Sie die Zahl 12.123456 eingeben, ist der gespeicherte Wert 12.1200.
3. Gleitkommazahlen speichern Näherungswerte in der Datenbank, während Festkommatypen Näherungswerte in der Datenbank speichern. Was in der Datenbank gespeichert wird, ist der genaue Wert.
decimal(m,d) Parameter m<65 ist die Gesamtzahl, d<30 und d
4. String (char, varchar, _text)
MySQL-Datentyp
Bedeutung
char(n)
feste Länge, bis zu 255 Zeichen
varchar(n)
Feste Länge, bis zu 65535 Zeichen
tinytext
Variable Länge, bis zu 255 Zeichen
Text
Variable Länge, bis zu 65535 Zeichen
mittlerer Text
Variable Länge, bis zu 2 hoch 24. Potenz - 1 Zeichen
Langtext
variable Länge, bis zu 2 hoch 32. Potenz - 1 Zeichen
char und varchar:
1.char(n) Wenn die Anzahl der gespeicherten Zeichen weniger als n beträgt, werden danach Leerzeichen hinzugefügt und die Leerzeichen werden bei der Abfrage entfernt. Daher dürfen am Ende von Zeichenfolgen, die im Typ char gespeichert sind, keine Leerzeichen stehen, und varchar ist nicht darauf beschränkt.
2.char(n) feste Länge, char(4) belegt 4 Bytes, egal wie viele Zeichen gespeichert werden, varchar ist die tatsächliche Anzahl der gespeicherten Zeichen + 1 Byte (n<=255) oder 2 Bytes (n> 255),
Also belegt varchar(4) beim Speichern von 3 Zeichen 4 Bytes.
3.Die Geschwindigkeit beim Abrufen von Zeichenfolgen vom Typ Char ist schneller als vom Typ Varchar. varchar und Text:
1.n kann für Varchar angegeben werden, kann jedoch nicht für Text angegeben werden. Der interne Speicher von Varchar ist die tatsächliche Anzahl der gespeicherten Zeichen + 1 Byte (n<=255) oder 2 Bytes (n>). 255), Text ist die tatsächliche Anzahl der Zeichen + 2 Wörter
Abschnitt.
2. Der Texttyp darf keinen Standardwert haben.
3.varchar kann direkt einen Index erstellen, und der Text muss die erste Anzahl von Zeichen angeben, um einen Index zu erstellen. Die Abfragegeschwindigkeit von Varchar ist schneller als die von Text. Beim Erstellen von Indizes scheint der Textindex nicht zu funktionieren.
5. Binärdaten (_Blob)
1. _TEXT wird im Textmodus gespeichert, und bei der englischen Speicherung wird die Groß-/Kleinschreibung beachtet, während _Blob unabhängig von der Groß-/Kleinschreibung gespeichert wird.
2._Die im BLOB gespeicherten Daten können nur als Ganzes ausgelesen werden.
3._TEXT kann den Zeichensatz angeben, _BLO muss den Zeichensatz nicht angeben. 6. Datums-/Uhrzeittyp 2 :25:36'
DatumUhrzeit
Datum und Uhrzeit '2008-12-2 22:06:44'
Zeitstempel
Speichern Sie automatisch die Datensatzänderungszeit
Wenn Sie ein Feld als Zeitstempel definieren, wird die Zeit in Dieses Feld Die Daten werden automatisch aktualisiert, wenn andere Felder geändert werden, sodass Felder dieses Datentyps den Zeitpunkt der letzten Änderung dieses Datensatzes speichern können.
Attribute von Datentypen
MySQL-Schlüsselwörter
Bedeutung
NULL
Datenspalten können NULL-Werte enthalten
NOT NULL
Datenspalten dürfen keine NULL-Werte enthalten
STANDARD
Standardwert
PRIMÄRSCHLÜSSEL
Primärschlüssel
AUTO_INCREMENT
Automatische Inkrementierung, geeignet für Ganzzahltypen
UNSIGNED
Unsigned
ZEICHENSATZname
Geben Sie ein Zeichen an eingestellt
2. ], signiert [-128,127], Tianyuan Blog Hinweis: Sowohl der boolesche Typ BIT als auch der Typ BOOL belegen 1 Byte signiert [0,65535 ], signiert [-32768,32767]
MediumInt
3
Unsigned [0,2^24-1], signiert [-2^23,2^23- 1]]
Int
4
Unsigned [0,2^32-1], signiert [-2^31,2^31-1]
BigInt
8
None Signed [0,2^64-1], signiert [-2^63,2^63 -1]
Float(M,D)
4
Gleitkommazahl mit einfacher Genauigkeit. Tianyuan Blog erinnert daran, dass D hier Präzision ist. Wenn D<=24, ist es der Standard-FLOAT. Wenn D>24, wird es automatisch in den Typ DOUBLE konvertiert.
Double(M,D)
8
Gleitkomma mit doppelter Genauigkeit.
Decimal(M,D)
M+1 oder M+2
Ungepackte Gleitkommazahl, die Verwendung ähnelt FLOAT und DOUBLE. Wenn Sie den Datentyp Decimal in ASP verwenden, erinnert Sie das Tianyuan Blog daran Aus der Datenbank gelesene Dezimalzahlen müssen vor dem Betrieb möglicherweise in den Typ Float oder Double konvertiert werden.
Datum
3
wird im Format JJJJ-MM-TT angezeigt, zum Beispiel: 2009-07-19
Datumszeit
8
wird im Format JJJJ-MM-TT HH angezeigt :MM:SS Das Format wird angezeigt, zum Beispiel: 2009-07-19 11:22:30
TimeStamp
4
wird im Format JJJJ-MM-TT angezeigt, zum Beispiel: 2009-07- 19
Zeit
3
Anzeige im Format HH:MM:SS. Beispiel: 11:22:30
Jahr
1
wird im Format JJJJ angezeigt. Beispiel: 2009
Char(M)
M
String fester Länge.
VarChar (M)
VarBinary(M)
M
Variabler Längen-Binärspeicher ähnlich wie VarChar, gekennzeichnet durch feste Länge ohne Auffüllung 0
Tiny Text
Max: 255
Groß- und Kleinschreibung wird nicht berücksichtigt
. Text
Max: 64K
Groß-/Kleinschreibung ignorieren
Mittlerer Text
Max: 16M
Groß-/Kleinschreibung ignorieren
Langer Text
Max: 4G
Groß-/Kleinschreibung ignorieren
TinyBlob
Max: 255
Fall empfindlich
Blob
Max:64K
Groß-/Kleinschreibung beachten
MediumBlob
Max:16M
Groß-/Kleinschreibung beachten
LongBlob
Max: 4G
Groß- und Kleinschreibung beachten
Enum
1 oder 2
Bis zu 65535 verschiedene Aufzählungswerte
Set
Bis zu 8
Bis zu 64 verschiedene Werte
Geometrie
Punkt
LineString
Polygon
MultiPoint
MultiLineString
MultiPolygon
GeometryCollection
3. Verwendungsvorschläge
1. Bei der Angabe des Datentyps wird im Allgemeinen das Prinzip der kleinen Größe übernommen. Wenn Sie beispielsweise den Typ TINY INT verwenden können, ist es besser Es ist am besten, den Typ DOUBLE nicht zu verwenden. Dies beeinträchtigt die Betriebseffizienz von MYSQL. Die Verbesserung ist enorm, insbesondere unter Testbedingungen mit großem Datenvolumen.
2. Es ist nicht nötig, die Datentabelle zu kompliziert zu gestalten. Die Unterscheidung zwischen Funktionsmodulen ist möglicherweise für die spätere Wartung von Vorteil. Seien Sie vorsichtig, wenn Sie Datentabellen und -felder benennen Fähigkeit
4. Stellen Sie sich vor dem Entwerfen der Datentabellenstruktur vor, dass das Ergebnis möglicherweise vernünftiger und effizienter ist. Das endgültige Designergebnis der Datenbank muss ein Kompromiss zwischen Effizienz und Skalierbarkeit sein Es ist unangemessen, sich einer Seite zuzuwenden. Die
Grundprinzipien für die Auswahl von Datentypen
Prämisse: Verwenden Sie eine geeignete Speicher-Engine.
Auswahlprinzip: Bestimmen Sie, wie der geeignete Datentyp basierend auf der ausgewählten Speicher-Engine ausgewählt wird.
Die folgenden Auswahlmethoden werden nach Speicher-Engine klassifiziert:
MyISAM-Datenspeicher-Engine und Datenspalten: MyISAM-Datentabelle. Am besten verwenden Sie Datenspalten mit fester Länge (CHAR) anstelle von Datenspalten mit variabler Länge (VARCHAR). . MEMORY-Speicher-Engine und Datenspalten: 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.
InnoDB-Speicher-Engine und Datenspalten: Es wird empfohlen, den Typ VARCHAR zu verwenden.
Bei InnoDB-Datentabellen unterscheidet das interne Zeilenspeicherformat nicht zwischen Spalten fester und variabler Länge (alle Datenzeilen verwenden Header-Zeiger auf Datenspaltenwerte), was im Wesentlichen bei der Verwendung von CHAR-Spalten fester Länge der Fall ist nicht Es muss einfacher sein als die Verwendung einer VARCHAR-Spalte variabler Länge. Daher ist der Hauptleistungsfaktor der von den Datenzeilen insgesamt genutzte Speicher. 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.
Lassen Sie uns über Datenspalten fester Länge und Datenspalten variabler Länge sprechen.
char ähnelt den Typen varchar
CHAR und VARCHAR, sie werden jedoch unterschiedlich gespeichert und abgerufen. Sie unterscheiden sich auch hinsichtlich ihrer maximalen Länge und ob nachgestellte Leerzeichen erhalten bleiben. Während der Speicherung oder des Abrufs wird keine Fallkonvertierung durchgeführt.
Die folgende Tabelle zeigt die Ergebnisse nach dem Speichern verschiedener Zeichenfolgenwerte in den Spalten CHAR(4) und VARCHAR(4) und veranschaulicht den Unterschied zwischen CHAR und VARCHAR:
Werte
CHAR(4)
Speicheranforderungen
VARCHAR(4)
Speicheranforderungen
''
'' ab '
4 Bytes
'ab '
3 Bytes
'abcd'
'abcd'
4 Bytes
'abcd'
5 Bytes
'abcdefgh'
' abcd'
4 Bytes
'abcd'
5 Bytes
Bitte beachten Sie, dass der Wert in der letzten Zeile in der obigen Tabelle nur gilt, wenn der strikte Modus nicht verwendet wird ; wenn MySQL im strikten Modus ausgeführt wird, werden Werte, die die Spaltenlänge überschreiten, nicht gespeichert , und es wird ein Fehler auftreten.
Die aus den Spalten CHAR(4) und VARCHAR(4) abgerufenen Werte sind nicht immer gleich, da nachgestellte Leerzeichen beim Abrufen aus der Spalte CHAR entfernt werden. Die folgenden Beispiele verdeutlichen diesen Unterschied:
mysql> CREATE TABLE vc (v VARCHAR(4), c CHAR(4));
Query OK, 0 rows affected (0.02 sec)
mysql> INSERT INTO vc VALUES ('ab ', 'ab ');
Query OK, 1 row affected (0.00 sec)
mysql> SELECT CONCAT(v, '+'), CONCAT(c, '+') FROM vc;
+----------------+----------------+
| CONCAT(v, '+') | CONCAT(c, '+') |
+----------------+----------------+
| ab + | ab+ |
+----------------+----------------+
1 row in set (0.00 sec)
Nach dem Login kopieren
Text und Blob
Bei der Verwendung von Text- und Blob-Feldtypen achten Sie bitte auf die folgenden Punkte, um die Leistung der Datenbank besser auszunutzen.
①BLOB- und TEXT-Werte können auch eigene Probleme verursachen, insbesondere wenn eine große Anzahl von Lösch- oder Aktualisierungsvorgängen ausgeführt wird. Das Löschen dieser Art von Werten hinterlässt eine große „Lücke“ in der Datentabelle. Datensätze, die diese „Lücken“ füllen, können in Zukunft unterschiedliche Längen haben. Um die Leistung zu verbessern, wird empfohlen, regelmäßig die Funktion OPTIMIZE TABLE zum Defragmentieren zu verwenden solche Tabellen.
②Verwenden Sie synthetische Indizes. Synthetische Indexspalten sind manchmal nützlich. Eine Möglichkeit besteht darin, einen Hashwert basierend auf den Inhalten anderer Spalten zu erstellen und diesen Wert in einer separaten Datenspalte zu speichern. Anschließend können Sie die Datenzeile finden, indem Sie den Hash-Wert abrufen. Wir sollten jedoch beachten, dass diese Technik nur für exakt passende Abfragen verwendet werden kann (Hash-Werte sind für Bereichssuchoperatoren wie < oder >= nicht nützlich). Wir können die MD5()-Funktion verwenden, um den Hash-Wert zu generieren, wir können SHA1() oder CRC32() verwenden, oder wir können unsere eigene Anwendungslogik verwenden, um den Hash-Wert zu berechnen. Denken Sie daran, dass numerische Hashwerte sehr effizient gespeichert werden können. Wenn ein Hashing-Algorithmus Zeichenfolgen mit nachgestellten Leerzeichen erzeugt, speichern Sie diese nicht in CHAR- oder VARCHAR-Spalten; sie werden durch die Entfernung nachgestellter Leerzeichen beeinträchtigt.
Synthetische Hash-Indizes sind besonders nützlich für BLOB- oder TEXT-Datenspalten. Eine Suche mit einem gehashten Bezeichnerwert ist viel schneller als das Durchsuchen der BLOB-Spalte selbst.
③Vermeiden Sie das Abrufen großer BLOB- oder TEXT-Werte, wenn dies nicht erforderlich ist. Beispielsweise ist eine SELECT *-Abfrage keine gute Idee, es sei denn, Sie können sicher sein, dass die WHERE-Klausel als Einschränkung nur die erforderlichen Datenzeilen findet. Andernfalls könnten Sie eine große Anzahl von Werten zwecklos über das Netzwerk übertragen. Dies ist auch ein Beispiel, bei dem es uns hilft, BLOB- oder TEXT-Identifikatorinformationen in einer synthetischen Indexspalte zu speichern. Sie können die Indexspalte durchsuchen, um zu ermitteln, welche Datenzeilen benötigt werden, und dann den BLOB- oder TEXT-Wert aus den qualifizierenden Datenzeilen abrufen.
④ Trennen Sie BLOB- oder TEXT-Spalten in separate Tabellen. In manchen Umgebungen ist das Verschieben dieser Datenspalten in eine zweite Datentabelle sinnvoll, wenn Sie dadurch die Datenspalten in der ursprünglichen Datentabelle in ein Zeilenformat mit fester Länge konvertieren können. Dies reduziert die Fragmentierung in der Haupttabelle und bietet Ihnen die Leistungsvorteile von Zeilen fester Länge. Außerdem können Sie damit SELECT*-Abfragen für die Hauptdatentabelle ausführen, ohne große Mengen an BLOB- oder TEXT-Werten über das Netzwerk übertragen zu müssen.
Gleitkommazahlen und Festkommazahlen
Um alle Aufmerksamkeit zu erregen, schauen wir uns vor der Einführung von Gleitkommazahlen und Festkommazahlen ein Beispiel an:
mysql> CREATE TABLE test (c1 float(10,2),c2 decimal(10,2));
Query OK, 0 rows affected (0.29 sec)
mysql> insert into test values(131072.32,131072.32);
Query OK, 1 row affected (0.07 sec)
mysql> select * from test;
+-----------+-----------+
| c1 | c2 |
+-----------+-----------+
| 131072.31 | 131072.32 |
+-----------+-----------+
1 row in set (0.00 sec)
Nach dem Login kopieren
Aus dem obigen Beispiel sehen wir, dass sich der Wert der Spalte c1 ändert von 131072,32 auf 131072,31, was durch die Ungenauigkeit von Gleitkommazahlen verursacht wird.
In MySQL sind Float und Double (oder Real) Gleitkommazahlen und Decimal (oder Numberic) ist eine Festkommazahl.
Der Vorteil von Gleitkommazahlen gegenüber Festkommazahlen besteht darin, dass Gleitkommazahlen bei konstanter Länge einen größeren Datenbereich darstellen können; der Nachteil besteht darin, dass es zu Genauigkeitsproblemen kommen kann. Bei zukünftigen Anwendungen von Gleitkomma- und Festkommazahlen sollte sich jeder an die folgenden Punkte erinnern:
Gleitkommazahlen haben Fehlerprobleme
Präzisionssensible Daten wie Währungen sollten im Festkomma dargestellt oder gespeichert werden Zahlen;
Achten Sie beim Programmieren besonders auf Fehlerprobleme und vermeiden Sie Gleitkommazahlen.
Achten Sie auf die Behandlung einiger Sonderwerte in Gleitkommazahlen.
Das obige ist der detaillierte Inhalt vonWas sind die Datentypen von MySQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen 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