suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Die Länge des Varchar-Speichers in MySQL

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:

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:

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粉455093123P粉455093123265 Tage vor373

Antworte allen(1)Ich werde antworten

  • P粉744691205

    P粉7446912052024-04-02 12:47:04

    也许是这样:

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

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

    Antwort
    0
  • StornierenAntwort