很多语言都有自己独特的数据类型,但是它们也往往支持一些共同的数据类型,比如“字符串”、“整型”、“浮点型”、“布尔类型”,等等,虽然它们风格迥异,实现原理也不尽相同,但是究其根本原因,还是为了方便开发者的使用。
MySQL为了存储数据的时候可以达到更高的效率,对数据类型的划分可能和编程语言有较大区别,它更多的是用来确定存放使用的空间大小和类型。
不同版本的MySQL支持的数据类型也可能稍有不同,不过总的来说改动不大,可以使用命令“? data types”查看所有的数据类型,查看某一种数据类型用“? int”。
一、基本数据类型
整数类型(5种):存储整数类型。
小数类型(3种):存储小数类型数据。
字符类型(12种):存储文本信息。
日期时间类型(5种):用于记录时间。
数值类型:整数和浮点数类型,存储实数的类型。
1、整数类型
这些数据类型主要区别是占空间的大小和存储值的范围不同。
类型 字节数 范围 signed unsigned
bigint 8 -2^64~2^64-1 0~2*2^64-1
int 4 -2^32~2^32-1 0~2*2^32-1
mediumint 3 -2^24~2^24-1 0~2*2^24-1
smallint 2 -2^16~2^16-1 0~2*2^16-1
tinyint 1 -128~127 -2^8~2^8-1 0~2*2^8-1
定义语法:
id int(11) unsigned;
说明:11为宽度指示器,指的是长度,不是字符数,不是指存储的长度为11位,所有的int类型存储空间大小和值范围是一样的,11是在屏幕输出的长度,如果存储的真实数据不足11位,将补齐到11位,比如int(11)值为20,不足11位,前面将补充9个空格。
可以用zerofill修饰符固定用0而不是空格来填充到宽度指示器的宽度,使用了zerofill就意味着此时是unsigned的数据,因为负数前补0没有意义。
若位数超过了宽度显示器长度,不会截取,除非超出了数据类型的长度,没有超过宽度显示器长度会用0补充。
类型转换:存储“12.46”、“2016奥运会”等数据时候会进行截取和类型转换(小数四舍五入),也会产生警告。
2、小数类型
浮点数是一个统称,我们通常用浮点数表示小数,也可以用定点数表示小数。
所谓浮点数,它有自己的一套IEEE规范,比如Java采用的就是IEEE754标准,有些编程语言还分为单精度和双精度,比如C语言,有些语言就只有浮点类型,比如PHP语言。
数据类型 字节 所属类型
float 4 浮点数
double 8 浮点数
decimal(M,D) 由M和D共同决定 定点数
浮点类型也支持宽度指示器,比如float(M,D),M为显示总位数,包括小数点(精度),D为小数点后位数(标度),小数点后不足D位,用00补齐,存储超出范围时会进行四舍五入或者存储最接近的值。
浮点数存储数据会存在一定的误差,而这一点误差往往可能会导致出现各种各样的灵异事件,在精度要求比较高的应用中,我们更加建议使用定点数而不是浮点数来保存数据。
对于decimal(M,D)所占据的字节空间,如果M>D,就是M+2个字节,否则就是D+2,不过我们绝大多数都是要求M>D的,定点数不同于浮点数,定点数实际上是以字符串形式存放的,所以定点数可以更加精确的保存数据。
在默认的安全模式下,对于定点数,如果实际插入的数值精度大于实际定义的精度,MySQL会进行警告,但是数据依然按照实际精28/121度四舍五入后插入。如果SQL Mode是在严格模式下,系统会直接报错,导致数据无法插入。
3、字符类型
MySQL提供了10个基本的字符串类型,可以存储的范围从一个简单的字符到巨大的文本块或者二进制字符串数据。
①、char
定长字符串,char(N),N是字符数而不是字节数,取值范围为0~255字节,填充数据的时候,比指定长度大的值将会被截断,比指定长度小的值默认用空格填充。
②、varchar
可变长字符串,varchar(N),N是字符数,取值范围为0~65535字节。
③、
④、
⑤、
⑥、
4、日期时间类型
bigint 8
int 4
mediumint 3
smallint 2
tinyint 1
float(M,D)精度,标度 4
double(M,D) 8
decimal(M,D)
float/double 有精度损失
decimal 定点型,更精确数值型可选参数
unsigned
无符号,列的值从0开始,不为负。
zerofill
适用于学号、编码等固定宽度的数字,可以填充至固定宽度。
自动加个unsigned。
2、字符串型
char
varchar
binary
varbinary
text
tinytext
text
mediumtext
longtext
blob
...
3、日期时间型
二、复合数据类型