Frage

Nur zur Klärung, indem Sie so etwas wie Varchar (45) angeben, kann es bis zu max. 45 Zeichen dauern? Ich erinnere mich, dass ich vor ein paar Jahren von jemandem gehört habe, dass sich die Nummer in der Klammung nicht auf die Anzahl der Charaktere bezieht, und dann versuchte die Person, mir etwas ziemlich kompliziertes zu erklären, was ich nicht bereits verstehe und vergessen habe.

Und was ist der Unterschied zwischen Zeichen und Varchar? Ich habe ein bisschen gesucht und festgestellt, dass CHAR Ihnen das maximale der Größe der Spalte gibt. Es ist besser, sie zu verwenden, wenn Ihre Daten eine feste Größe haben und varchar verwenden, wenn Ihre Datengröße variiert.

Aber wenn es Ihnen das Maximum der Größe der Spalte aller Daten dieser Spalte gibt, ist es dann nicht besser, sie zu verwenden, wenn Ihre Datengröße variiert? Vor allem, wenn Sie nicht wissen, wie groß Ihre Datengröße sein wird. Varchar muss die Größe angeben (Zeichen braucht nicht wirklich, oder?), Ist es nicht mehr problematisch?

War es hilfreich?

Lösung

Sie müssen auch die Größe mit angeben CHAR. Mit CHAR, Spaltenwerte werden mit Leerzeichen gepolstert, um die von Ihnen angegebene Größe zu füllen, während mit VARCHAR, Nur der tatsächliche Wert, den Sie angegeben haben, wird gespeichert.

Zum Beispiel:

CREATE TABLE test (
    char_value CHAR(10),
    varchar_value VARCHAR(10)
);

INSERT INTO test VALUES ('a', 'b');

SELECT * FROM test;

Das obige wählt "a" für aus char_value und "B" für varchar_value

Wenn alle Ihre Werte ungefähr gleich groß sind, die CHAR ist möglicherweise eine bessere Wahl, da es oft weniger Speicherplatz benötigt als VARCHAR. Das ist weil VARCHAR speichert sowohl die Länge des Wertes als auch den Wert selbst, während CHAR kann einfach den (festen Größen-) Wert speichern.

Andere Tipps

Das MySQL -Dokumentation gibt eine gute Erklärung der Speicheranforderungen der verschiedenen Datentypen.

Insbesondere für eine Längekette l, a CHAR(M) Der Datentyp wird (M XC) Bytes aufnehmen (wobei C die Anzahl der Bytes ist, die erforderlich sind, um ein Zeichen zu speichern ... Dies hängt von dem in verwendeten Zeichen ab). EIN VARCHAR(M) Nimmt (l + 1) oder (l + 2) auf, je nachdem, ob m <= 255 oder> 255 ist.

Es hängt also wirklich davon ab, wie lange Sie von Ihren Saiten erwarten, wie die Variation der Länge sein wird.

NB: In der Dokumente werden die Auswirkungen von Charaktersätzen auf die Speicheranforderungen von a nicht erörtert VARCHAR Typ. Ich habe versucht, es genau zu zitieren, aber ich vermute, dass Sie die Saitenlänge auch mit der Charakter-Byte-Breite multiplizieren müssen, um die Speicheranforderung zu erhalten.

Zeichen und Varchar werden tatsächlich irrelevant, wenn Sie in Ihrer Tabelle nur 1 Feld variabler Länge haben, wie ein Varchar oder einen Text. MySQL wechselt automatisch alle Zeichen in Varchar.

Der Datensatz mit fester Länge/Größen kann Ihnen zusätzliche Leistung ergeben, aber Sie können keine Feldtypen für variable Länge verwenden. Der Grund dafür ist, dass es für MySQL schneller und einfacher ist, den nächsten Rekord zu finden.

Wenn Sie beispielsweise eine ausgewählte * aus der Tabelle Limit 10 ausführen, muss MySQL die Tabellendatei für den zehnten Datensatz scannen. Dies bedeutet, das Ende jedes Datensatzes zu finden, bis Sie das Ende des 10. Datensatzes finden. Wenn Ihre Tabelle jedoch festgelegte Länge/Größenaufzeichnungen hat, muss MySQL nur die Datensatzgröße kennen und dann 10 x #Bytes überspringen.

Wenn Sie wissen, dass eine Spalte eine kleine, feste Anzahl von Zeichen verwenden, verwenden Sie einen Zeichen, andernfalls verwenden Sie einen VARCHAR. Eine Zeichensäule ist auf die maximale Länge gepolstert.

Varchar hat einen kleinen Overhead (4-8 Bytes abhängig von RDBMs), verwendet jedoch nur den Overhead + die tatsächliche Anzahl der gespeicherten Zeichen.

Für die Werte, von denen Sie wissen, dass sie konstant sein werden, beispielsweise für Telefonnummern, Postleitzahlen usw., ist es optimal, "char" mit Sicherheit zu verwenden.

Das komplizierte Zeug, an das Sie sich nicht erinnern, ist, dass sich die 45 auf Bytes beziehen, nicht auf Zeichen. Es ist nicht dasselbe, wenn Sie eine Multibyte -Charakter -Codierung verwenden. In Oracle können Sie Bytes oder Zeichen explizit angeben.

varchar2(45 BYTE)

oder

varchar2(45 CHAR)

Sehen Unterschied zwischen Byte und char in Spaltendatenatypen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top