一. MySQL的数据类型
在Java 中,有八个基本的数据类型和其他的引用类型, 如 int, double, char, String 等。 其中, int 修饰的属性类型是 整数,表示某个对象的这个属性值只能是整数, 不能是小数类型, double表示这个属性值只能是小数类型,不能是字符串类型, String表示 这个属性值只能是字符串类型,不能是整数或者是小数类型。 而 MySQL 是专门用来存储和管理数据的,当然也定义了很多数据的类型,如数值型,字符串型,日期型。 由于存储时需要占用内存相应的容量,为了尽可能的节省资源(数据量小时是没有多大事的,就像老蝴蝶平时学习和工作时数据量小,所以数据库的数据类型都是建立常用的,可在大数据时代,就不好说了),又将某种类型,如数值型,进行更细的划分。 对于这些数据类型,我们只需要了解即可, 不需要在实际业务中很准确的使用。 就像整数类型年龄, 你用int 定义,还是用 smallint 定义,没有多大的区别。 相反,为了与实体保持一致,还推荐使用 int 定义呢, 还有关于年份 year, 老蝴蝶都是 用int 整数型定义,而不是用mysql 的日期类型的 year 定义。 所以,这一章节老蝴蝶只讲解常用的数据类型。
MySQL的数据类型分类:
- 数值类型
- 整数类型
- tinyint
- smallint
- mediumint
- int
- bigint
- 浮点小数类型
- float
- double
- 定点小数类型
- decimal
- 日期时间类型
- 日期
- Year
- Date
- 时间
- Time
- 日期和时间
- Datetime
- timestamp
- 字符串类型
- 文本字符串
- char
- varchar
- binary
- varbinary
- text
- set
- enum
- 二进制字符串
- blob
二 数值类型
二.一 整数类型
整数类型有 tinyint,smallint,mediumint,int,bigint 五种类型。 均可以用 AUTO_INCREMENT 来自动增长。
1 . 所占的字节数
与java 一样,所占的字节数越小,能表示的取值范围越小, 所占的字节数越大,取值范围越大。
2 . 取值范围
3 . 定义表中的属性 类型时, 常用的是 int(4) , 其中(4) 指的是显示的文本宽度,并不是能插入的整数最大的宽度,也不是指的字节数。 其中,只要不超过int的最大范围 即 2147483647的话均可以正常的插入, 它的字节数仍然是 4个字节。 1可以正常插入,9999也可以正常插入,10000也可以正常插入, 1000000000 也可以正常的插入。
如将 user 表中的 age 长度设置成 2.
插入数据,
可以正常的插入,不报错。
查询时: (select * from user; 后面会讲查询语句)
也可以正常的显示。
4 . int 类型默认的长度是 11 位。 最大值 2147483647.length() +1
5 . 通常直接使用 int 类型即可。
二.二 浮点数
1 . 浮点类型有两种, 单精度浮点数(float) 和双精度浮点数(double)
2 .浮点数可以用 (M,N) 来表示, 其中 M称为精度, 是总共的位数, N是标度, 是小数的位数。 小数点不算位。 如 double(4,2) 能存入的最大值是 99.99, 并不是9.99 . 即: 整数部分是 M-N, 小数部分是N.
3 . float 和double 所占的字节数
4 . float 和double 所表示的取值范围
5 . 如果插入的数字的精度范围超出了标度范围,会进行四舍五入的处理。
如 double(4,2) 如果插入的值是99.123 , 小数点位数是3位,超过了规定的2位,是能够正确的插入的,但要进行四舍五入的处理,实际存储到数据库中的值 是 99.12, 如果插入的值是 99.129, 那么存储到数据库中的就是99.13
二.二 定点数
1 . 定点数只有一种, Decimal
2 .定点数也可以用 (M,N) 来表示。 其中,M表示精度,是总共的位数,N是标度,是小数的位数。
3 . 所占的字节数
4 . Decimal 实际是以字符串进行存放的
5 . Decimal 如果不指定精度,默认是 (10,0)
二.二 浮点数与定点数的比较
1 . 在长度一定的情况下, 浮点数比定点数表示的范围大, 但会引起精度问题。
2 . 在对数据精度要求较高时,如 财务,科学数据等, 会Decimal ,其他情况下,一般都用浮点数。
3 . 浮点数在进行加,减运算时, 所得出的结果不一定是正确的结果, 就像JS 中的浮点数运算一样。 如 1+0.9999999, 不一定是 1.9999999,可能是 1.9999999000000002