Heim  >  Artikel  >  Datenbank  >  Was sind die Datentypen von MySQL?

Was sind die Datentypen von MySQL?

青灯夜游
青灯夜游Original
2020-09-27 17:00:4872138Durchsuche

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.

Was sind die Datentypen von MySQL?

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 m25d3b6098d2cfff9efebe19a3c5375b0 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 (na1cae4dfcfce2a5f311845e177eb284a). 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'ZeitstempelSpeichern Sie automatisch die DatensatzänderungszeitAttribute von DatentypenMySQL-SchlüsselwörterBedeutungNULLDatenspalten können NULL-Werte enthaltenNOT NULLDatenspalten dürfen keine NULL-Werte enthalten
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.

STANDARD

StandardwertPRIMÄRSCHLÜSSELPrimärschlüsselAUTO_INCREMENTAutomatische Inkrementierung, geeignet für GanzzahltypenUNSIGNEDUnsignedZEICHENSATZnameGeben 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]

MediumInt3Unsigned [0,2^24-1], signiert [-2^23,2^23- 1]]Int4Unsigned [0,2^32-1], signiert [-2^31,2^31-1]BigInt8None Signed [0,2^64-1], signiert [-2^63,2^63 -1]Float(M,D)4Gleitkommazahl mit einfacher Genauigkeit. Tianyuan Blog erinnert daran, dass D hier Präzision ist. Wenn D774c73a59e8abf83a63bcc6f092c7e2824, wird es automatisch in den Typ DOUBLE konvertiert. Double(M,D)8 Gleitkomma mit doppelter Genauigkeit. Decimal(M,D)M+1 oder M+2Ungepackte 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. Datum3 wird im Format JJJJ-MM-TT angezeigt, zum Beispiel: 2009-07-19Datumszeit8 wird im Format JJJJ-MM-TT HH angezeigt :MM:SS Das Format wird angezeigt, zum Beispiel: 2009-07-19 11:22:30TimeStamp4 wird im Format JJJJ-MM-TT angezeigt, zum Beispiel: 2009-07- 19Zeit3 Anzeige im Format HH:MM:SS. Beispiel: 11:22:30Jahr1 wird im Format JJJJ angezeigt. Beispiel: 2009Char(M)MVarChar (M) VarBinary(M)MVariabler Längen-Binärspeicher ähnlich wie VarChar, gekennzeichnet durch feste Länge ohne Auffüllung 0Tiny TextMax: 255Groß- und Kleinschreibung wird nicht berücksichtigt. Text Max: 64KGroß-/Kleinschreibung ignorierenMittlerer TextGroß-/Kleinschreibung ignorierenLanger TextMax: 4GGroß-/Kleinschreibung ignorieren TinyBlobMax: 255Fall empfindlichBlobMax:64KGroß-/Kleinschreibung beachtenMediumBlobMax:16MGroß-/Kleinschreibung beachtenLongBlobMax: 4G Groß- und Kleinschreibung beachtenEnum 1 oder 2Bis zu 65535 verschiedene AufzählungswerteSetBis zu 8Bis zu 64 verschiedene WerteGeometriePunkt LineStringPolygon MultiPointMultiLineStringMultiPolygonGeometryCollection

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
String fester Länge.

Max: 16M

CHAR(4)'' ab ''abcd'' abcd'
Speicheranforderungen VARCHAR(4) Speicheranforderungen ''
4 Bytes 'ab ' 3 Bytes 'abcd'
4 Bytes 'abcd' 5 Bytes 'abcdefgh'
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)

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 0c55574367f335e00d3ed11372063196= 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)

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:

  1. Gleitkommazahlen haben Fehlerprobleme
  2. Präzisionssensible Daten wie Währungen sollten im Festkomma dargestellt oder gespeichert werden Zahlen;
  3. Achten Sie beim Programmieren besonders auf Fehlerprobleme und vermeiden Sie Gleitkommazahlen.
  4. 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!

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