Einführung Kennen Sie wirklich den Unterschied zwischen CHAR- und VARCHAR-Typen beim Speichern und Lesen? Lassen Sie mich zunächst einige Schlussfolgerungen ziehen: 1. Beim Speichern wird CHAR vor dem Speichern immer mit Leerzeichen aufgefüllt, unabhängig davon, ob der Benutzer beim Einfügen von Daten am Ende Leerzeichen einfügt. 2. Beim Speichern füllt VARCHAR vor dem Speichern keine Leerzeichen aus. Wenn der Benutzer jedoch beim Einfügen ausdrücklich Leerzeichen hinzufügt, wird es so gespeichert, wie es ist, und nicht gelöscht. 3. Beim Lesen von Daten löscht CHAR immer nachstehende Leerzeichen (auch wenn beim Schreiben Leerzeichen enthalten sind). 4. Beim Lesen von Daten ruft VARCHAR den zuvor gespeicherten Wert immer wahrheitsgetreu ab (wenn beim Speichern ein nachstehendes Leerzeichen vorhanden ist, bleibt dieses weiterhin erhalten und das nachstehende Leerzeichen wird nicht wie bei CHAR gelöscht). Nachfolgend wird der Testüberprüfungsprozess beschrieben. 1. Testen Sie den CHAR-Typ Tabellenstruktur: TABELLE ERSTELLEN `tchar` ( `id` int(10) unsigned NICHT NULL STANDARD '0', `c1` char(20) NICHT NULL STANDARD '', PRIMÄRSCHLÜSSEL (`id`) )ENGINE=InnoDB STANDARD-CHARSET=utf8mb4; Fügen Sie einige Datensätze ein: in tchar-Werte einfügen (1, concat('a', repeat(' ',19))); in tchar-Werte einfügen (2, concat(' ', repeat('a',19))); in Tchar-Werte einfügen (3, 'a'); in Tchar-Werte einfügen (4, ''); in tchar-Werte einfügen (5, ''); Sehen Sie sich die Speicherstruktur an: (1) INFIMUM Datensatzoffset:99 Heap-Nr.:0 ... (2) SUPREMUM-Datensatzoffset:112, Heap-Nr.:1 ... (3) normaler Datensatz-Offset:126 Heap-Nr.:2 ... <- ID=1 (4) normaler Datensatz-Offset:169 Heap-Nr.:3 ... <- ID=2 (5) normaler Datensatz-Offset:212 Heapno:4 ... <- ID=3 (6) normaler Datensatz-Offset:255 Heapno:5 ... <- ID=4 (7) normaler Datensatz-Offset:298 Heapno:6 ... <- ID=5 Sind Sie ein wenig verwirrt, wenn Sie dieses Zeug sehen? Erinnern Sie sich an das Tool, das ich Ihnen empfohlen habe? Schauen Sie hier: innblock | InnoDB-Seitenbeobachtungstool. Wie Sie sehen, nimmt jeder Datensatz unabhängig von der Länge der Zeichenfolge tatsächlich 43 (169-126=43) Bytes ein. Daher gilt Schlussfolgerung 1. Schauen wir uns die Ergebnisse des Lesens der Tchar-Tabelle an: Wählen Sie ID, Concat ('000', c1, '$$$'), Länge (c1) aus tchar. +----+----------------------------+------------+ | ID | concat('000',c1,'$$$') | Länge(c1) | +----+----------------------------+------------+ | 1 | 000a$$$ | 1 | <- nachstehende Leerzeichen entfernen | 2 | 000 aaaaaaaaaaaaaaaaaaaaa$$$ | 20 | | 3 | 000a$$$ | 1 | | 4 | 000$$$ | 0 | <- Entfernen Sie das Leerzeichen am Ende. Das Ergebnis ist dasselbe wie bei id=5 | 5 | 000$$$ | 0 | +----+----------------------------+------------+ 2. Testen Sie den VARCHAR-Typ Tabellenstruktur: CREATE TABLE `tvarchar` ( `id` int(10) unsigned NICHT NULL STANDARD '0', `c1` varchar(20) NICHT NULL STANDARD '', PRIMÄRSCHLÜSSEL (`id`) ) ENGINE=InnoDB STANDARD-CHARSET=utf8mb4 Fügen Sie einige Datensätze ein: in tvarchar-Werte einfügen (1, concat('a', repeat(' ',19))); in tvarchar-Werte einfügen (2, concat(' ', repeat('a',19))); in tvarchar-Werte einfügen (3, 'a'); in tvarchar-Werte einfügen (4, ''); in tvarchar-Werte einfügen (5, ''); in tvarchar-Werte einfügen (6, ''); Sehen Sie sich die Speicherstruktur an: (1) INFIMUM Datensatzoffset:99 Heap-Nr.:0 ... (2) SUPREMUM-Datensatzoffset:112, Heap-Nr.:1 ... (3) normaler Datensatz-Offset:126 Heap-Nr.:2 ... <- ID=1 (4) normaler Datensatz-Offset:169 Heap-Nr.:3 ... <- ID=2 (5) normaler Datensatz-Offset:212 Heapno:4 ... <- ID=3 (6) normaler Datensatz-Offset:236 Heapno:5 ... <- ID=4 (7) normaler Datensatz-Offset:260 Heapno:6 ... <- ID=5 (8) normaler Datensatz-Offset:283 Heapno:7 ... <- ID=6 Es ist ersichtlich, dass die Byteanzahl mehrerer Datensätze wie folgt lautet: 43, 43, 24, 24, 23, 23 (der letzte Datensatz ist derselbe wie der Datensatz mit der ID = 5). Schauen wir uns die Ergebnisse des Lesens der tvarchar-Tabelle an: Wählen Sie ID, Concat ('000', c1, '$$$'), Länge (c1) aus tvarchar. +----+----------------------------+------------+ | ID | concat('000',c1,'$$$') | Länge(c1) | +----+----------------------------+------------+ | 1 | 000a $$$ | 20 | <- nachstehende Leerzeichen werden im Leseergebnis nicht entfernt | 2 | 000 aaaaaaaaaaaaaaaaaaaa$$$ | 20 | | 3 | 000a$$$ | 1 | | 4 | 000 $$$ | 1 | <- Dieses Leerzeichen wird im Leseergebnis nicht gelöscht | 5 | 000$$$ | 0 | | 6 | 000$$$ | 0 | +----+----------------------------+------------+ Generell können zwei Schlussfolgerungen gezogen werden: Sehen wir uns abschließend an, was in der Dokumentation steht:
Die in den obigen Tests verwendeten Versionen und Umgebungen sind: mysql> Version auswählen()\G ... version(): 8.0.15 mysql> wähle @@sql_mode\G ... @@sql_mode: NUR_VOLLSTÄNDIGE_GRUPPE_DURCH, STRENGE_TRANS_TABELLEN, KEINE_NULL_IM_DATUM, KEIN_NULL_DATUM, FEHLER_FÜR_DIVISION_DURCH_NULL, KEINE_ENGINE_SUBSTITUTION Referenzdokumentation 11.4.1 Die CHAR- und VARCHAR-Typen, https://dev.mysql.com/doc/refman/5.7/en/char.html Oben finden Sie ausführliche Informationen zum Unterschied zwischen MySQL CHAR- und VARCHAR-Speicher. Weitere Informationen zu MySQL CHAR und VARCHAR finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: js, um den Effekt des Ziehens des Schiebereglers zu erzielen
>>: Detaillierte Erläuterung des Implementierungsprozesses der ServerSocket-Standard-IP-Bindung
Um uns auf dem Server schnell bei der Datenbank a...
Inhaltsverzeichnis 1. Einführung in integrierte O...
Inhaltsverzeichnis 1. Verstehen 2. Verwendung 1. ...
<br />Der Inhalt wurde aus dem Internet repr...
Inhaltsverzeichnis 1. Konzept 2. Umgebungsbeschre...
Das Betriebssystem für die folgenden Inhalte ist:...
1. Ändern Sie die Firewall-Einstellungen und öffn...
Dies ist ein wichtiges (und wunderbares) Thema fü...
Vorwort Wenn der Code ausgeführt wird und ein Feh...
Beim Erlernen von CSS3 geht es mehr darum, sich m...
Vorwort Um beim Testen die Fähigkeit des Projekts...
Inhaltsverzeichnis Fügen Sie dem GitHub+Jekyll-Bl...
Im Allgemeinen wird die Maus als nach oben gericht...
Das Schönste, was in einer Produktionsumgebung pa...
0. Hintergrund Hardware: Xiaomi Notebook Air 13/I...