一、 int(M) 与 char(M) 中 'M' 的意义
(1)、int(M) 的M的意义?int(10) 与 int (4) 有什么 区别?
M:数据库查询(select)时,显示给用户的数据最大长度(多少位数字),如果不够,就用0填充(Zerofill打√才行)。
它并不能决定int占用的存储大小,int占用的存储大小都是 4字节=32位。
图例:
(2)、char(M) 中 M的含义
M:允许存入的最大的字符数量。
char(4)和varchar(4):都意味着只能存入4个字符,存入超出部分会被剔除到只剩下4个字符。
二、char 与 varchar的比较
(1)char的长度是固定的
如:char(10),占用大小(单位:字节):10个字符*1个字符的大小
存储空间占用大小一定占10个字符的大小,少于10个就用空格在右边填充(检索取出来的时候空格一般会被删去),超出10个删去多出部分。
(2)varchar的长度是不固定的。
如:varchar(10),占用大小:实际字符个数*1个字符的大小+1byte(这1字节用来记录varchar的实际字符个数)
而且它的最大字符个数不能超出10个。
--------------------
(下面一段来源:https://blog.csdn.net/CSDN_GOON/article/details/50057669)
定长的char的优势:
一,存储很短的信息,比如门牌号码101,201……这样很短的信息应该用char,因为varchar还要占1个byte用于存储信息长度,本来打算节约存储的现在得不偿失。
二,固定长度的。比如使用uuid作为主键,那用char应该更合适。因为他固定长度,varchar动态根据长度的特性就消失了,而且还要占1个长度信息。
三,十分频繁改变的column。因为varchar每次存储都要有额外的计算,得到长度等工作,如果一个非常频繁改变的,那就要有很多的精力用于计算,而这些对于char来说是不需要的。
--------------------
总结:
char比varchar更快,但是更占用存储空间。
存取效率(比运算速度):char>varchar , 空间分配效率(比谁更能节约空间): char<varchar。
用char的情况:
(1)、数据较短且字符数量较固定(此时,varchar的动态大小优势不明显,如果1个字符用varchar的话,varchar就更加鸡肋了);
(2)、需要字符长度固定时;
(3)、该列数据经常会被改动。
用varchar的情况:
字符信息较长 且 字符数量变动范围较大 时。