mysql 数据类型的概念
定义数据类型的本质上是定义列 类似于描述列
数据分类的意义
分配合适的存储空间
采用不同的操作方法
对应不同的需求
整数类型
正负0 造成 负数多一个
tinyint 1byte 0-255 -128 ~ 127
smallint 2b 0~65535
mediumt 3b
int 4b
bigint 8b
带小数的类型
float 4b 0,(3.4)
double 8b
decimal M>D M+2
M<D D+2
decimal 最大支持 (65,30) 默认为(10,0)
M 整数位
D 小数位
日期和时间类型
类型 格式 存储需求 范围
YEAR(M) YYYY/YY 1b 1901/1979 2155/2069
TIME HH:MM:SS 3b -838:59:59 838:59:59
DATE YYYY-MM-DD 3b 1000-01-01 9999-12-31
DATETIME YYYY-MM-DD HH:MM:SS 8b 1000-01-01 00:00:00 9999-12-31 23:59:59
TIMESTMP YYYY-MM-DD HH:MM:SS 4b 1970-01-01 00:00:00 2038-01-19 03:14:07 UTC
use db2
create table t_year(
col1 year(4),
col2 year(2)
);
inster into t_year values (2014),(14)
select * from t_year
当用单引号 把0括上 默认从 2000年开始
inster into t_time values ('10:10:10');
('2 10:10') TIME 就变成了 (58:10:00);
字符串类型
文本字符串类型和二进制字符串类型
不仅可以存储字符串,还可以存储其它数据
字符串可以区分或不区分大小比较
支持进行模式匹配查找
类型 大小范围 用途 存储要求
char(M)定长字符串 0-255b 定长字符串 Mbytes 1<=M<=255
varchar(M) 0-65535b 变长字符串 L+1 bytes L<=M 且 1<=M<=255
tinybolb 0-255
tinytext 0-255
blob 0-65535
text 0-65535
mediumblob 0-16777215
mediumtext 0-16777215
logngblob 0-4294067295
longtext 0-4294067295
enum 1-2
set 1-8
show variables like 'sql_mode';
text 类型
长的非二进制字符串
例如:文章、评论
可以把text类型理解为varchar 加长增强版
text 类型不区分大小写 匹配查询的时候无法匹配大小写
enum类型
枚举型 不区分大小写
create table t1 (sex enum ('F','M','UN'));
set类型
可以多选
create table t2(s1 set('a','b','c'));
desc t1 查看表结构
二进制类型
no character set
以bytes为单位存储,文本是用 字符 存储的
字符串类型的选择
不同的数据引擎,选择倾向不一样
myisam 中 char 效率高于 varchar
innodb 中 char 效率基本等于 varchar 但是varchar 可变长度的优势显示出来了
memory 中 car varchar 效率类似,
不同的用户选择倾向不同
char 适合短的字符,并且经常变更的内容
varchar 与上条相反。
浮点数和定点数的选择
精度要求不同,选择大不同
相比较而言,定点数的计算代价要昂贵的多
decimal 跟钱有关的事情, 对数据精度要求高的采用
大数据类型的选择
能不用尽量不用
text 和 blob有很多替代选择
如果存在经常的删除和更新
建议定期使用 optimize table 进行碎片整理
建议 调用 文件地址存进去
日期类型的选择
timestamp扎用空间少,但是注意他的特性,有时区限制,根据市区的选择会编号
总结
定义数据类型就是定义列
数据 字符串 整数、浮点 定点 日期 二进制 enum set boleen
不同引擎 不同表现选择不同
需求选择