标签:ros 两种 alt 基础 字符串 ext 需求 就是 也有
mysql基础就先从支持的数据类型说起,mysql一共支持三种数据类型,数值类型,字符串类型,日期。
数值类型:数值类型又分为两种类型整型和浮点类型
整型:bit、bool、tinyint、smallint、mediumint、int、bigint
浮点型:float、double、decimal
字符串类型:char、varchar、tinytext、text、mediumtext、longtext、tinyblob、blod、mediumblob、longblob
日期类型:date、time、datetime、year、timestamp
第一个说整型,整型是一个比较常用的数据类型,在it这块还是比较常见的。整形有五种,分别为bit、bool、tinyint、smallint、mediumint、int、bigint。
那么这五种类型的所占空间是多少呢,咱们先来测一下。建立一张表,随意建立一个。
-- 存在删除表 drop table if exists test_table_one; create table test_table_one( a bit, b bool, c TINYINT, d SMALLINT, e int, f BIGINT )
查看一下表结构。
-- 查看表结构 desc test_table_one;
得到结果。
从这张表中,我们看到的并不是这些类型的实际存储大小,这些只不过是最小的显示位数,基本上建表的时候使用默认给定的就可以了,除非有特殊需求,指定了zerofill,类似下面这种情况。
drop table if exists test_table_one; create table test_table_one( a bit, b bool, c TINYINT, d SMALLINT, e int(10) ZEROFILL, f BIGINT )
要想指定显示的位数,就可以像上边e int(10)这样去指定。
得到的结果
insert into test_table_one set e = 1; select * from test_table_one;
真正的存储空间占用的大小在下面这张图(来自于w3c)
当选用类型的时候,一定要考虑好字段的范围,然后根据范围去选,这里给出一个阿里开发规范中的推荐选择,就是id应该选择bigint类型。
接下来就是浮点类型了,浮点类型有三种,float,double、decimal。这三种类型还有另一种表现形式,float(m,d),double(m,d),decimal(m,d),解读一下第二种表示方式的含义,其中m为全部位数的个数,d为小数的最大位数。在float和double中,m的范围为0到60,而d的范围为0到30,,表示的范围在上面的表中有体现。
再说一下decimal,decimal也有两种表现形式一种是decimal,第二种就是decimal(m,d),m和d的含义和double和float的意义一样,唯一不同的是,如果使用decimal,并且没有指定m和d,这里有一个默认的值,m默认为10,d默认为0.测一下。
drop table if exists test_table_two; create table test_table_two( a float, b double, c decimal ) desc test_table_two;
运行结果为
系统给定的默认值为m=10,d=0,当存入的数精度不符时,三种都会发生截断现象。测试数据
drop table if exists test_table_two;
create table test_table_two(
a float(6,3),
b double(6,3),
c decimal(6,3)
)
desc test_table_two;
insert into test_table_two values(1.23456,2.345,5.6789);
select * from test_table_two;
结果:
不光超出的位数发生了截断,而且还进行了四舍五入。不过阿里还是推荐使用decimal(m,d)的这种方式,一只没弄清楚原因。
未完,待续。。。。。。
标签:ros 两种 alt 基础 字符串 ext 需求 就是 也有
原文地址:https://www.cnblogs.com/Lighting-Sui/p/11247673.html