0、背景
创建数据库表的时候,涉及到字符串字段的时候,有时候会考虑到,我字段要定义多长呢,对于一个字段,对于一个值name="小明",字段我定义为varchar(50)和varchar(255)有没有区别,有什么影响?
create table student(
name varchar(50)
)
insert into student (name) values ('小明')
1、对于物理存储上来说,没有区别
- mysql存储行记录varchar的数据,是以下面的形式的,在【变长字段长度列表】这个块中存储varchar字段真实的length
- 所以对于同样的值“小明”,mysql都是存储同样的值到【列1的值】,同时存储【02】到【变长字段长度列表】
2、但对于查询是有一定影响的。
(1)当使用了【MEMORY引擎】,并且涉及到创建临时表(SORT、ORDER 等)时,VARCHAR会转换为CHAR。而如果varchar(50)的话==>char(50),在内存中创建结果集时,它会将其转换为矩阵,字段越小,一个页面能存储的数据就越多,表扫描的记录就越快
(2)但对于InnoDB来说,是没有区别的,还是变动长度的