乐趣区

关于mysql:MySQL数据类型

​ 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);

退出移动版