MySQL支持的数据类型
MySQL 支持的数据类型 大致分为数值类型 字符串类型 日期和时间类型 复合类型
数值类型
类型 | 字节 | 范围(有符号) | 范围(无符号) |
---|---|---|---|
TINYINT | 1 | (-128,127) | (0,255) |
SMALLINT | 2 | (-32768,32767) | (0,65535) |
MEDIUMINT | 3 | (-8388608,8388607) | (0,16777215) |
INT | 4 | (-2147483648,2147483647) | (0,4294967295) |
BIGINT | 8 | (-9233372036854775808,9223372036854775807) | (0,18446744073709551615) |
FLOAT | 4 | (-3.402823466 E+38,1.175494351 E-38),0,(1.175494351 E-38,3.402823466351 E+38) | 0,(1.175494351 E-38,3.402823466 E+38) |
DOUBLE | 8 | (1.7976931348623157 E+308,2.2250738585072014 E-308),0,(2.2250738585072014 E-308,1.7976931348623157 E+308) | 0,(2.2250738585072014 E-308,1.7976931348623157 E+308) |
注:
1、整数 带有 1 个显示宽度指示器。当从数据库检索一个值时,可以把这个值加长到指定的长度。
例如,指定一个字段的类型为 INT(6),就可以保证所包含数字少于 6 个的值从数据库中检索出来时能够自动地用空格填充。
需要注意的是,使用一个宽度指示器不会影响字段的大小和它可以存储的值的范围。
2、MySQL 会在不合规定的值插入表前自动修改为 0。
3、浮点数 带有 2 个附加参数:一个显示宽度指示器和一个小数点指示器。
例如语句 FLOAT(7,3) 规定显示的值不会超过 7 位数字,小数点后面带有 3 位数字。
字符串类型
类型 | 字节大小 | 描述及存储需求 |
---|---|---|
CHAR | 0-255 字节 | 定长字符串 |
VARCHAR | 0-255 字节 | 变长字符串 |
TINYBLOB | 0-255 字节 | 不超过 255 个字符的二进制字符串 |
TINYTEXT | 0-255 字节 | 短文本字符串 |
BLOB | 0-65535 字节 | 二进制形式的长文本数据 |
TEXT | 0-65535 字节 | 长文本数据 |
MEDIUMBLOB | 0-16777215 字节 | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0-16777215 字节 | 中等长度文本数据 |
LOGNGBLOB | 0-4294967295 字节 | 二进制形式的极大文本数据 |
LONGTEXT | 0-4294967295 字节 | 极大文本数据 |
注:
1、VARCHAR 会增加一个额外字节来存储字符串本身的长度。
2、TEXT 和 BLOB 类型在分类和比较上存在区别。BLOB 类型区分大小写,而 TEXT 不区分大小写。大小修饰符不用于各种 BLOB 和 TEXT 子类型。
日期和时间类型
类型 | 字节 | 范围 | 格式 |
---|---|---|---|
DATE | 4 | 1000-01-01/9999-12-31 | YYYY-MM-DD |
TIME | 3 | -838:59:59’/‘838:59:59 | HH:MM:SS |
YEAR | 1 | 1901/2155 | YYYY |
DATETIME | 8 | 1000-01-01/9999-12-31 | YYYY-MM-DD HH:MM:SS |
TIMESTAMP | 4 | 1970-01-01/2037 年 | YYYYMMDD HHMMSS |
注:
1、没有冒号分隔符的 TIME 类型值,将会被 MySQL 理解为持续的时间,而不是时间戳。
2、如果我们对 TIMESTAMP 类型的字段没有明确赋值,或是被赋与了 null 值。MySQL 会自动使用系统当前的日期和时间来填充它。
复合类型
ENUM 类型:从一个集合中取得一个值
SET 类型:从一个集合中取得任意多个值