MySQL主要提供的整数类型有TINYINT、SMALLINT、MEDIUMINT、INT(INTEGER)和 BIGINT
| 类型 | 说明 | 存储大小 | 取值范围 | |
|---|---|---|---|---|
| TINYINT | 很小的整数 | 1Byte | 有符号:-128~127 无符号:0~255 | |
| SMALLINT | 小的整数 | 2Byte | 有符号:32768~32767 无符号:0~65535 | |
| MEDIUMINT | 中等大小的整数 | 3Byte | 有符号:-8388608~8388607 无符号:0~16777215 | |
| INT(INTEGER) | 普通大小的整数 | 4Byte | 有符号:-2147483648~2147483647 无符号:0~4294967295 | |
| BIGINT | 较大的整数 | 8Byte | 无符号:0~18446744073709551615 |
注意:int(5),注意后面的数字5,它表示的是该数据类型指定的显示宽度,即能够显示的数值中数字的个数,显示宽度和数据类型的取值范围是无关的

MySQL中使用浮点数和定点数来表示小数
浮点数类型和定点数类型都可以用(M,N)来表示。其中,M称为精度,表示总共的位数;N称为标度,表示小数的位数
不论是定点数还是浮点数类型,如果用户指定的精度超出精度范围,则会四舍五入,DECIMAL若不指定精度则默认为(10,0)
| 单精度浮点类型 | 双精度浮点类型 | 定点数类型 |
|---|---|---|
| FLOAT(M,N) | DOUBLE (M,N) | DECIMAL(M,N) |
| 类型 | 格式 | 取值范围 | 存储大小 |
|---|---|---|---|
| YEAR | YYYY | 1901~2155 | 1Byte |
| TIME | HH:MM:SS | -838:59:59~838:59:59 | 3Byte |
| DATE | YYYY-MM-DD | 1000-01-01~9999-12-3 | 3Byte |
| DATETIME | YYYY-MM-DD HH:MM:SS | 1000-01-01 00:00:00~9999-12-31 23:59:59 | 8Byte |
| TIMESTAMP | YYYY-MM-DD HH:MM:SS | 1970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07 UTC | 4Byte |
YEAR:
① 输入格式为‘YYYY’或者YYYY,例如输入‘2010’或2010,插入到数据库的值均为2010
② 以2位字符串格式表示的YEAR,范围为‘00’到‘99’。‘00’~‘69’和‘70’~‘99’范围的值分别被转换为2000~2069和1970~1999范围的YEAR值。‘0’与‘00’的作用相同。插入超过取值范围的值将被转换为2000
③ 以2位数字表示的YEAR,范围为1~99。1~69和70~99范围的值分别被转换为2001~2069和1970~1999范围的YEAR值。注意:在这里0值将被转换为0000,而不是2000
TIME:
① ‘D HH:MM:SS’格式的字符串。可以使用下面任何一种“非严格”的语法:‘HH:MM:SS’、‘HH:MM’、‘D HH:MM’、‘D HH’或‘SS’。这里的D表示日,可以取0~34之间的值。在插入数据库时,D被转换为小时保存,格式为“D*24+HH”
② ‘HHMMSS’格式的、没有间隔符的字符串或者HHMMSS格式的数值,假定是有意义的时间。例如:‘101112’被理解为‘10:11:12’,但‘109712’是不合法的(它有一个没有意义的分钟部分),存储时将变为00:00:00
DATE:
① 以‘YYYY-MM-DD’或者‘YYYYMMDD’字符串格式表示的日期,取值范围为‘1000-01-01’~‘9999-12-3’。例如,输入‘2012-12-31’或者‘20121231’,插入数据库的日期都为2012-12-31
② 以‘YY-MM-DD’或者‘YYMMDD’字符串格式表示的日期,在这里YY表示两位的年值。包含两位年值的日期会令人模糊,因为不知道世纪。MySQL使用以下规则解释两位年值:‘00~69’范围的年值转换为‘2000~2069’;‘70~99’范围的年值转换为‘1970~1999’。例如,输入‘12-12-31’,插入数据库的日期为2012-12-31;输入‘981231’,插入数据的日期为1998-12-31
③ 以YY-MM-DD或者YYMMDD数字格式表示的日期,与前面相似,00~69范围的年值转换为2000~2069,70~99范围的年值转换为1970~1999。例如,输入12-12-31插入数据库的日期为2012-12-31;输入981231,插入数据的日期为1998-12-31
④ 使用CURRENT_DATE或者NOW(),插入当前系统日期
DATETIME:
① 以‘YYYY-MM-DD HH:MM:SS’或者‘YYYYMMDDHHMMSS’字符串格式表示的值,取值范围为‘1000-01-01 00:00:00’~‘9999-12-3 23:59:59’。例如,输入‘2012-12-31 05: 05:05’或者‘20121231050505’,插入数据库的DATETIME值都为2012-12-31 05: 05: 05。
② 以‘YY-MM-DD HH:MM:SS’或者‘YYMMDDHHMMSS’字符串格式表示的日期,在这里YY表示两位的年值。与前面相同,‘00~69’范围的年值转换为‘2000~2069’,‘70~99’范围的年值转换为‘1970~1999’。例如,输入‘12-12-31 05: 05: 05’,插入数据库的DATETIME为2012-12-31 05: 05: 05;输入‘980505050505’,插入数据库的DATETIME为1998-05-05 05:05: 05。
③ 以YYYYMMDDHHMMSS或者YYMMDDHHMMSS数字格式表示的日期和时间。例如,输入20121231050505,插入数据库的DATETIME为2012-12-31 05:05:05;输入981231050505,插入数据的DATETIME为1998-12-31 05: 05: 05。
TIMESTAMP:
TIMESTAMP与DATETIME除了存储字节和支持的范围不同外,还有一个最大的区别就是:DATETIME在存储日期数据时,按实际输入的格式存储,即输入什么就存储什么,与时区无关;而TIMESTAMP值的存储是以UTC(世界标准时间)格式保存的,存储时对当前时区进行转换,检索时再转换回当前时区。查询时,不同时区显示的时间值是不同的。
| 类型 | 说明 | 存储大小 |
|---|---|---|
| CHAR(M) | 固定长度字符串 | 0~255Byte |
| VARCHAR(M) | 可变长度字符串 | 0~65535Byte |
| TINYTEXT | 非常小的字符串 | 255(28–1)字符 |
| TEXT | 小的字符串 | 65535(216–1)字符 |
| MEDIUMTEXT | 16777215(224–1)字符 | |
| LONGTEXT | 大的字符串 | 4294967295(232–1)或4GB字符 |
| ENUM | 枚举类型 | |
| SET | 大的字符串 |
M为限制长度