1.应用场景
设计/修改数据表结构时,需要考虑和合理选择字段类型和长度。 |
2.学习/操作
1. 文档
2. 整理输出2.1 整型数据类型 -- int(1)vs int(4) 与 tinyint(1) vs int(1)1. 设定类型之后,存储是定长的,int(1) 和 int(4) 从本身长度还是存储方式上都是一样的。 MySQL里,int(1) 和 int(4)的区别: 就是显示的长度, 但是要设置一个参数:如果列制定了zerofill 就会用0填充显示,如 2 int(3)指定后就会显示为002
int表示的数字范围是:从 -2^31 (-2,147,483,648) 到 2^31 – 1 (2,147,483,647) 的整型数据(所有数字)。 tinyint 表示的范围是0-255之间的数字。
插入查询呢?
总结tinyint(1) 和 tinyint(3) 没区别,占用字节都是一位,存储范围是一样, 只是显示不同,实际存储数据没区别. tinyint(3) zerofill, 当插入的数据少于3位的时候,左边自动补零,这才是限制显示长度. int(1) 和 tinyint(1) , 够用的情况下, 优先选择tinyint(1),因为占字节少、节省空间。 tinyint(一个字节) , smallint (两个字节), MEDIUMINT(三个字节) int(4个字节) BIGINT(8个字节) 这里数据类型决定了其都是阿拉伯数字。 截图如下: 关于fillzero --- 最新版本 MySQL版本
2.2 字符串类型 -- varchar(5) vs varchar(16)有没有觉得我们设置varchar长度的时候,很多时候都设置成255,这是为什么呢?其实是因为在5.5.3版本之前,
要控制字节长度,就要说到字节编码了。 但是 varchar(5) 中的5 限制的是储存字符的个数, 字符不分贵贱(即中文、英文、数字...都是一样) varchar(255) 是为了索引而设置,能够存储255个汉字。 varchar(255) 后来成为一些人使用的惯性,其实应根据实际业务场景设置长度。 varchar(n) 中的n在mysql 5.0.3之前表示n个字节,之后表示n个字符,按照实际使用的数据库字符编码集,占用不同字节数量,比如GBK、UTF8MB4等等。 验证: 首先varchar(5)与varchar(10)有区别吗? mysql 版本:8.0 test_varchar table的数据结构 可以看到,写入williamning 出现如下报错: 1406 - Data too long for column 'name' at row 1 改为写入ning,同时count字段写入1 可以看到正常写入,同时count字段值,默认填充00,结果为001,因为字段类型为tiny(3),并且设置fillzero 写入long_name,value 为williamning 如此,正常写入~ 可以知道,varchar(5) 与 varchar(16)中数字是为了限定字符的数量,还是应该根据自身业务进行设置的。 至于底层row的limit size则是所有字段value的实际存储限制,这里面涉及到几个限制,有些还是相互限制,而且根据不同mysql版本,限制有所不同。 后续补充 ... |
3.问题/补充
1. mysql 各种int的范围与使用场景
使用建议
|
4.参考
tinyint(1)和int(1)的区别_zcw4237256的博客-CSDN博客_tinyint和int有啥区别 database design - MySQL - varchar length and performance - Database Administrators Stack Exchange |
后续补充
...