MySQL各類型字段可定義最大寬度



今天瀏覽mysql的官網文檔,無意中看到如圖划線部分一句話,引起了我的興趣,所以決定做實驗官方所言。

 

條例1.創建數據表時,所有字段定義時"寬度之和"不得超過65535字節;

條例2.理論上的char(255)、varchar(65532)、varbinary(65532)字段最大值定義,實際情形是達不到的,因為首先要遵守條例1。


實驗測得規律(MySQL5.7):
    tinyint 定義占1字節

    smallint 定義占2字節

    int 定義占4字節

    char(2) 定義占2*3=6字節(當存儲3個中文時每字占3字節,所以占6字節)

    char(3) 定義占3*3=9字節

    varchar(10) 定義占10*3=30字節(當存儲10個中文時每字占3字節,所以占30字節)

    varbinary(8) 定義占8+1=9字節

    text 定義占10字節

    mediumtext 定義占10+1=11字節

    decimal(10,2) 定義占5字節

實驗

實驗1:只有一個ch20字段

drop table `tab4`;

create table `tab4`(
`ch20` varbinary(65532) COMMENT '定義占65532字節'
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='實驗表';
實驗2:添加 `num1` tinyint 字段

drop table `tab4`;

create table `tab4`(
`num1` tinyint,
`ch20` varbinary(65531) COMMENT '定義占65532-1 = 65531 字節'
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='實驗表';
實驗3:再添加 `num2` int 字段

drop table `tab4`;

create table `tab4`(
`num1` tinyint,
`num2` int,
`ch20` varbinary(65527) COMMENT '定義占65532-1-4 = 65527 字節'
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='實驗表';
實驗4:再添加 `chr1` char(4) 字段


drop table `tab4`;

create table `tab4`(
`num1` tinyint,
`num2` int,
`chr1` char(4),
`ch20` varbinary(65515) COMMENT '定義占65532-1-4-4*3 = 65515 字節'
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='實驗表';
實驗5:再添加 `content` text 字段

drop table `tab4`;

create table `tab4`(
`num1` tinyint,
`num2` int,
`chr1` char(4),
`content` text,
`ch20` varbinary(65505) COMMENT '定義占65532-1-4-4*3-10 = 65505 字節'
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='實驗表';

 

小結:新添加的字段“取決於最大行大小”是指,`ch20` varbinary(65505) 與其它所有字段共享寬度,此消彼長;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM