Ich frage mich, wie viel tatsächlicher Speicherplatz von diesen beiden Datentypen beansprucht wird, da die MySQL-Dokumentation in dieser Angelegenheit etwas unklar ist.MySQL char & varchar Zeichensätze & Speichergrößen
CHAR (M) M × w Bytes, 0 < = M < = 255, wobei w die Anzahl von Bytes ist für die Maximallängen-Zeichen in dem Zeichen
gesetzt erforderlichVARCHAR (M) , VARBINARY (M) L + 1 Bytes, wenn Spaltenwerte erfordern 0 - 255 Bytes, L + 2 Bytes, wenn Werte können mehr als 255 Byte
erfordern Dies scheint mir zu implizieren, dass bei einer UTF-8-encoded Datenbank wird ein CHAR immer 32 Bits pro Zeichen einnehmen, während ein VARCHAR dauert zwischen 8 und 32 abhängig von der tatsächlichen Byte-Länge der gespeicherten Zeichen. Ist das korrekt? Oder impliziert ein VARCHAR eine 8-Bit-Zeichenbreite, und das Speichern von UTF8-Zeichen mit mehreren Oktetts verbraucht tatsächlich mehrere Zeichen aus dem VARCHAR? Oder speichert der VARCHAR auch immer 32 Bits pro Zeichen? So viele Möglichkeiten.
Nicht etwas, um das ich mich schon so lange Sorgen machen musste, aber ich fange an, in-memory temp-Tabellengrößenlimits zu treffen und ich möchte nicht notwendigerweise den verfügbaren Pool von MySQL vergrößern Zeit).
diejenigen, MySQLs 'utf8' Speicherung hinzuzufügen, ist nicht nur verkrüppelt, es ist nicht dein Standard UTF-8 entweder. 'utf8'-codierte Strings werden mit ungefähr der doppelten Speicherkapazität von regulären UTF-8-codierten Strings gespeichert, was sie noch ineffizienter macht. – deceze
@deceze Ich war mir dessen nicht bewusst. Haben Sie irgendwelche Details oder Hinweise dazu? – Celada
Ich wünschte, ich hätte es getan, aber die Dokumentation sagt nicht viel darüber aus. Es gab kürzlich eine Frage darüber, wie die Datenbank gedumpt werden sollte, wo Daten in binärer Form ausgegeben wurden, was sehr offensichtlich ist. – deceze