现在做的项目在用MySQL,这里总结一下MySQL的数据类型。
1.整数
可选参数M表示查询结果中数据列的最大显示宽度,对取值没有影响.
数据类型 | 范围(有符号) | 范围(无符号) | 存储需求 |
TINYINT(M) | -128~127(2^7-1) | 0~255(2^8-1) | 8位整数,占1个字节 |
SMALLINT(M) | -32768~32767(2^15-1) | 0~65535(2^16-1) | 16位整数,占2个字节 |
MEDIUMINT(M) | -8388608~8388607(2^23-1) | 0~16777215(2^24-1) | 24位整数,占3个字节 |
INT(M) | -2147483648~ 2147483647(2^31-1) | 0~4294967295(2^32-1) | 32位整数,占4个字节 |
BIGINT(M) | -9223372036854775808~ 9223372036854775807(2^63-1) |
(2^64-1) | 64位整数,占8个字节 |
2.浮点数
M是十进制数的总个数(包括小数点后面数字的个数),D是小数点后面的数字个数,M>=D,参数M只显示数值的显示效果,对数值的精度没有影响,参数D会对数值作四舍五入,比如FLOAT(6,2)或DOUBLE(6,2),如果插入1111.1254,则会取值1111.13;如果插入1111.1244,则会取值1111.12;如果插入的数字在截取小数后长度超过总长度M,比如插入11211.1254,则会出错,插入的数字变成总长度为M、小数点后面位数为D的最大数字,也就是9999.99。
下面的范围只是理论值,具体值与硬件或操作系统有关。
数据类型 | 范围 | 说明 |
FLOAT[(M,D)] | -3.402823466E+38 ~ -1.175494351E-38, 0,和1.175494351E-38 ~ 3.402823466E+38 | 8位精度,占4个字节 |
DOUBLE[(M,D)] | -1.7976931348623157E+308 ~ - 2.2250738585072014E-308, 0,和2.2250738585072014E-308~ 1.7976931348623157E+308 | 16位精度,占8个字节 |
3.定点数
数据类型 | 范围 | 存储需求 |
DECIMAL[(M,D)] | M表示数字总个数,最大值是65,默认为0; D表示小数点后面的数字总个数,最大值是30,默认为0; | 以字符串形式来存放定点数,M>=D,参数D会对数值作四舍五入,比如DECIMAL(6,2),如果插入1111.1254,则会取值1111.13;如果插入1111.1244,则会取值1111.12; 如果插入的数字在截取小数后长度超过总长度M,比如插入11211.1254,则会出错,插入的数字变成总长度为M、小数点后面位数为D的最大数字,也就是9999.99。 |
4.字符串
数据类型 | 范围 | 说明 |
CHAR(N) | 最多2^8-1=255个字符 | 固定长度的字符串 |
VARCHAR(N) | 最多2^16-1=65535个字符 | 可变长度的字符串,VARCHAR最大字符长度必须在声明列时设置,超长的字符串将在存储时截断。 |
TINYTEXT | 最多2^8-1=255个字符 | 可变长度的字符串,不允许设置最大长度。 |
TEXT | 最多2^16-1=65535个字符 | 可变长度的字符串,不允许设置最大长度。 |
MEDIUMTEXT | 最多2^24-1= 16777215个字符 | 可变长度的字符串,不允许设置最大长度。 |
LONGTEXT | 最多2^32-1= 4294967295个字节, | 可变长度的字符串,不允许设置最大长度。 |
5.二进制
数据类型 | 范围 | 说明 |
BIT(N) | 最多64位 | 存放二进制数据,N是二进制的位数. |
TINYBLOB | 最多2^8-1=255个字节 | 可变长度二进制数据 |
BLOB | 最多2^16-1=65535个字节 | 可变长度二进制数据 |
MEDIUMBLOB | 最多2^24-1= 16777215个字节 | 可变长度二进制数据 |
LONGBLOB | 最多2^32-1= 4294967295个字节 | 可变长度二进制数据 |
6.日期与时间
数据类型 | 范围 | 说明 |
DATE | 1000-01-01~9999-12-31 | 占3个字节,格式是YYYY-MM-DD |
DATETIME | 1000-01-01 00:00:00 ~9999-12-31 23:59:59 | 占8个字节,格式是YYYY-MM-DD HH:MM:SS |
TIMESTAMP | 1970-01-01 00:00:00 ~ 2037 | 占4个字节,格式是YYYY-MM-DD HH:MM:SS; 不要选用TIMESTAMP数据列来保存“真正的”日期/时间数据,那么做的最佳选择是DATETIME数据类型。 |
TIME | -838:59:59 ~ 838:59:59 | 占3个字节,格式是HH:MM:SS |
YEAR | 1901 ~ 2155 | 占1个字节,格式是YYYY |
7.集合
数据类型 | 范围 | 说明 |
ENUM | 最多65535个成员 | 字符串的排列集合。 |
SET | 最多255个成员 | 字符串的组合集合,不赞成使用ENUM或SET作为数据类型,因为不方便数据迁移。 |