抱歉,英文不是我的母語...:(
我想了解 varchar 的實際長度如何儲存在 mysql .ibd 檔案中。所以我決定做一個這樣的測試:
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 | +------+-----+------+------+
我透過ultraEdit開啟ibd文件,十六進位的varchar長度如下所示:
但是這些欄位的值太短,只需要一個位元組就可以計數,所以我又做了一個這樣的測試:
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));
它的 ibd 檔如下:
但是C4的長度的十六進位是 64 81
,十進位是 25729
。超過 356
。我嘗試加上兩個十六進制,但是 64 81 = E5
十進制是 229,不等於 356
。
這讓我很困惑,所以我想知道為什麼 c4 的十六進位顯示這樣,以及如何找出 356
也許是這樣:
您是否找到了 NULL 標誌在何處/如何出現?