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
也许是这样:
您是否找到了 NULL 标志在何处/如何出现?