Mysql中常见的数据类型
选择恰当的数据类型,对于MYSQL服务器的性能影响至关重要,在建表根据自己的业务逻辑选择恰当的数据类型和数据长度,也是我们MYSQL查询优化的一种重要方式;
参考书籍:《高性能MYSQL》
数据类型选择的
1.数据类型选择遵守的原则
- 更小的通常更好(在正常存储数据的情况下,最小数据类型最好,可以提高性能)
- 尽量避免null
基础知识点
1.不同编码类型,存储数据的大小不一致。utf-8, 一个汉字3字节 英文字母1字节;
2.GBK存储,1个汉字2个字节,英文字母1个字节;
2.数字类型
1.整数类型
存储的值的范围在-2(n-1)到2(n-1)-1,其中n是存储空间的维数
类型 | 大小 | 特点 | 备注 |
---|---|---|---|
unsigned | 表示无符号的,表示不允许负值,可以让正数的大小扩大一倍 | ||
Zerofill 标记 | Int(4) | zerofill显示时不足4位会补0 | |
tinyint | 1字节,8位,大小在-128~127 | tinyint unsigned 大小编程了 0~255 | |
smallint | 2字节,16位 | ||
mediumint | 3字节,24位 | ||
int | 4字节,32位 | ||
bigint | 8字节,64位 |
2.实数类型
一般用域存储带小数点的。可以分为精确类型和不精确类型。
浮点类型
类型 | 大小 | 特点 | 备注 |
---|---|---|---|
FLOAT | 4字节 | ||
dobule | 8字节 |
精确类型
类型 | 大小 | 特点 | 备注 |
---|---|---|---|
decimal | 定点浮点型做精确运算 | ||
nemeric |
3. 字符串类型
分配的长度过多,会造成排序操作的性能损失
类型 | 大小 | 特点 | 备注 |
---|---|---|---|
varchar | 大小为64k,即65535个字节,而varchar要用1-2字节来存储字段长度,小于255的1字节,大于255的2字节 | 1.括号中给定的是最大长度 2.变长字符串,用于存储可变的长字符串,比定长更胜空间 3.容易产生碎片 |
具体和存储引擎有关 |
char | 最长不超过255个字节 | 1.定长字符串; 2.效率更高; 3.如果长度不足会补空格; 4.比较适合用来存储密码之类; |
可以用来存储是非性别值,因为只需要1个字节,varchar还需要额外的1个字节记录长度 |
text | 65535字节 | 保存字符串 有字符集和排序规则 |
mysql无法对全部长度的字符串索引 |
blob | 用来保存二进制字节数据 | mysql无法对全部长度的字符串索引 |
4. 日期和时间类型
类型 | 大小 | 特点 | 备注 |
---|---|---|---|
DATETIME | 包含最大范围的值,从1001-9999年,精度位秒 | 1.将日期封装进YYYYMMDDHHMMSS的正数据中,与时区无关,8个字节存储 | |
TIMESTAMP | 从1970年1月1日开始到2038年 | 1.修改一行数据时,第一个timestamp字段会自动更新为系统当前时间 2.不能取null值,填入null值时,就会自动填入当前系统时间; 3.空间效率更高 |
5.其他类型
位数据类型和选择标识符类型没用的比较少,大概了解一下;具体可以看《高性能MYSQL》相关章节知识