整型利用细节:
。生产中应该抉择哪种类型
在满足业务所需数值范畴的状况下,抉择占用字节更少的类型。能够节俭内存空间
。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’);
浮点型利用细节:
。生产中浮点数如何抉择?
但凡波及到资金的,倡议抉择 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。
字符串类型利用细节:
。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 字节。
日期类型利用细节:
。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);