a. 整型
整型 | 占字节大小(单位 byte) | 数值范畴(unsigned) | 数值范畴(signed) | |
---|---|---|---|---|
tinyint | 1 | (0,255) | (-128,127) | |
smallint | 2 | (0,65 535) | (-32 768,32 767) | |
mediumint | 3 | (0,16 777 215) | (-8 388 608,8 388 607) | |
int | 4 | (0,4 294 967 295) | (-2 147 483 648,2 147 483 647) | |
bigint | 8 | (0,18 446 744 073 709 551 615) | (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) |
整型利用细节:
。生产中应该抉择哪种类型
在满足业务所需数值范畴的状况下,抉择占用字节更少的类型。能够节俭内存空间
。int(11)、tinyint(4) 与 zerofill(0 填充) 的问题
只是显示属性,没有实际意义,只示意宽度,不会影响字段的值
alter table t1 modify a tinyint zerofill not null;
a
tinyint(3) unsigned zerofill NOT NULL
正数加 zerofill 是不被容许的
。int 类型转换为 bigint 注意事项
如果该列是主键,则无奈应用 onlineddl
如果不是主键,反对 onlineddl
onlineddl:执行 ddl 语句,能够反对 dml 语句,不会阻塞 dml 语句
。ipv4 地址抉择什么类型寄存
倡议应用 int 类型存储。
inet_aton(‘ip’) 将 ip 地址转为整型 select inet_aton(‘255.255.255.255’);
inet_ntoa(‘int’) 将整型转为 ip 地址 select inet_ntoa(‘4294967295’);
b. 浮点型
浮点型 | 占字节大小(单位 byte) | 精度 | ||
---|---|---|---|---|
float | 4 | 单精度 | ||
double | 8 | 双精度 | ||
decimal | 对 DECIMAL(M,D),如果 M >D,为 M + 2 否则为 D +2 | 高精度 |
浮点型利用细节:
。生产中浮点数如何抉择?
但凡波及到资金的,倡议抉择 decimal。
。测试环境中插入随机字符?
floor() : 向下取整 select floor(‘1.23’);
ceil():select ceil('1.23');
round():select round(0.54); select round(0.5354, 2);
rand():取 0 - 1 随机值 select rand();
公式:floor(i+rand()(j-i)) 随机取 i - j 整数 select floor(1+rand()(10-1)); 随机取 1 -10
insert into t2 values(repeat(‘a’, floor(1+rand()*(30-1))));
。float 长度细节
float 没有定义长度,默认占 4 字节
float(p) , 0<=p<=24, 占 4 字节
25<=p<=53, 占 8 字节
。float 列不指定精度时,不能做等值查问
等值查问后果为空。
。decimal 最大长度
decimal(M,D) M 最大值 65,D 最大值 30。
c. 字符串类型
字符串类型 | 阐明 | N 的含意 | 是否有字符集 | 最大长度 |
---|---|---|---|---|
char(n) | 定长字符 | 字符 | 是 | 255 |
varchar(n) | 变长字符 | 字符 | 是 | 65535 |
binary(n) | 定长二进制字节 | 字节 | 否 | 255 |
varbinary(n) | 变长二进制字节 | 字节 | 否 | 65535 |
tinyblob | 二进制大对象 | 字节 | 否 | 256 |
blob | 二进制大对象 | 字节 | 否 | 16k |
mediumblob | 二进制大对象 | 字节 | 否 | 16M |
longblob | 二进制大对象 | 字节 | 否 | 4G |
tinytext | 大对象 | 字节 | 是 | 256 |
text | 大对象 | 字节 | 是 | 16k |
mediumtext | 大对象 | 字节 | 是 | 16M |
longtext | 大对象 | 字节 | 是 | 4G |
字符串类型利用细节:
。varchar 是变长类型,须要额定的 1 - 2 个字节
varchar(30) <255 额定占用 1 字节,>255 额定占 2 字节
。char(30)、varchar(30),在 utf8 字符集下,占字节数计算
char(30) 占用字节数 =30*3
varchar(30) 占用字节数 =30*3+1
。varchar 理论长度超过 255 字节时,会被作为 text 解决
。varchar 长度越长排序时应用更多的内存空间,所以 varchar 类型的字段长度越短越好
。字段超长可能会造成页溢出(off page)
page 16k,字段超过 page 大小的一半,就会产生 off page
。大文本大字段尽量不要去应用,业务上必须有的话,能够寄存到独立子表中
。对 text 列进行排序,只会用到 max_sort_length 字节去作排序
。enum() 枚举类型,细节
enum(v_list), v_list 最多能够是 65535 个,如果不超过 255 占 1 字节,超过 255 占 2 字节。
d. 日期类型
日期类型 | 大小 | 范畴 | ||
---|---|---|---|---|
datetime | 8 | 1000-01-01 00:00:00/9999-12-31 23:59:59 | ||
timestamp | 4 | 完结工夫是北京工夫 2038-1-19 11:14:07 | ||
date | 3 | 1000-01-01/9999-12-31 | ||
time | 3 | ‘-838:59:59’/’838:59:59’ | ||
year | 1 | 1901/2155 |
日期类型利用细节:
。timestamp,当行被更改时,会自动更新为以后工夫
5.6.5 之后 datetime 也能够设置自动更新为以后工夫
alter table t3 modify d datetime default current_timestamp on update current_timestamp;
。5.6.4 之后底层都是以整型存储,效率高,举荐应用 datetime
。日期函数
now() 以后工夫 select now();
cast(now() as date) 工夫转换 select cast(now() as date);