Die Länge des Varchar-Speichers in MySQL
P粉455093123
P粉455093123 2024-04-01 15:50:34
0
1
335

Tut mir leid, Englisch ist nicht meine Muttersprache...:(

Ich möchte verstehen, wie die tatsächliche Länge von Varchar in der MySQL-IBD-Datei gespeichert wird. Also habe ich beschlossen, einen Test wie diesen zu machen:

CREATE TABLE record_format_demo (
         c1 VARCHAR(10),
        c2 VARCHAR(10) NOT NULL,
         c3 CHAR(10),
         c4 VARCHAR(10)
     ) CHARSET=ascii ROW_FORMAT=COMPACT;

INSERT INTO record_format_demo(c1, c2, c3, c4) VALUES('aaaa', 'bbb', 'cc', 'd');

SELECT * FROM record_format_demo;
+------+-----+------+------+
| c1   | c2  | c3   | c4   |
+------+-----+------+------+
| aaaa | bbb | cc   | d    |
+------+-----+------+------+

Ich habe die ibd-Datei über ultraEdit geöffnet und die Varchar-Länge im Hexadezimalformat ist wie folgt:

  • HEX 01 ist die Länge von c4, Dezimalzahl ist 1
  • HEX 03 ist die Länge von c2, dezimal ist 3
  • HEX 04 ist die Länge von c1, dezimal ist 4

Aber die Werte dieser Spalten sind zu kurz und benötigen nur ein Byte zum Zählen, also habe ich einen weiteren Test wie diesen durchgeführt:

CREATE TABLE record_format_demo2 (
         c1 VARCHAR(10),
        c2 VARCHAR(256) NOT NULL,
         c3 CHAR(10),
         c4 VARCHAR(357)
     ) CHARSET=ascii ROW_FORMAT=COMPACT;
         
         
INSERT INTO record_format_demo2(c1, c2, c3, c4) VALUES('aaaa', REPEAT('a',127), 'cc', REPEAT('a', 356));

Die IBD-Datei lautet wie folgt:

  • HEX 04 ist die Länge von c1, da „aaaa“ nur 4 Zeichen umfasst
  • HEX 7F ist die Länge von c2, die dezimal 127 beträgt, weil c2 = REPEAT('a',127)

Aber die Länge von C4 im Hexadezimalformat beträgt 64 81 ,十进制是 25729 。超过 356。我尝试加上两个十六进制,但是 64 + 81 = E5 十进制是 229,不等于 356.

Das verwirrt mich, deshalb möchte ich wissen, warum das Hex für c4 so angezeigt wird und wie ich das herausfinden kann 356

P粉455093123
P粉455093123

Antworte allen(1)
P粉744691205

也许是这样:

  • x81 为 01,高位打开
  • 高位表示“这个数字是连续的”
  • 延续是 x64
  • 将各个部分放在一起得出 x0164 = 十进制 356

您是否找到了 NULL 标志在何处/如何出现?

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage