MySQL支持多种类型,大致可以分为三类:数值、日期、字符串类型。
数值类型
MySQL支持所有标准SQL数值数据类型。这些类型包括严格数值类型(INTEGER,SMALLINT,DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT,REAL 和 DOUBLE PRECISION)
类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|---|
TINYINT | 1字节 | (-128,127) | (0,255) | 小整数值 |
SMALLINT | 2字节 | (-2^15,2^15-1) | (0,2^16-1) | 大整数 |
MEDIUNINT | 3字节 | (-2^23,2^23-1) | (0,2^24-1) | 大整数 |
INT或INTEGER | 4字节 | (-2^31,2^31-1) | (0,2^32-1) | 大整数 |
BIGINT | 8字节 | (-2^63,2^63-1) | (0,2^64-1) | 极大整数 |
FLOAT | 4字节 | 单精度,浮点数 | ||
DOUBLE | 8字节 | 双精度,浮点数 | ||
DECIMAL(M,D) | M+2字节 | 对小数更精确的存储 |
自MySQL3.23以来,DECIMAL 值是根据ANSI 规范进行处理的, ANSI 规范规定DECIMAL(M, D) 必须能够表示M 位数字及D 位小数的任何值。M的取值范围1~65,默认值为10 。D的取值范围0~30 。
例如,DECIMAL(5, 2) 必须能够表示从-999.99 到999.99 的所有值。而且必须存储符号和小数点,因此DECIMAL 值占M + 2 个字节。对于DECIMAL(5, 2),“最长”的值(-999.99)需要7个字节。而正数取值范围这一段不需要正号,因此MySQL数据类型利用它扩充了取值范围,使其超过了ANSI 所规范所要求的取值范围。如DECIMAL(5, 2) 的最大值为9999.99,因为有7 个字节可用。
日期和时间
每个时间类型有一个有效值范围和一个‘零’值,当指定不合法的MySQL的时间值时使用‘零’值。
类型 | 大小(字节) | 范围 | 格式 | 用途 |
---|---|---|---|---|
DATE | 3 | 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 00:00:00, 9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
TIMESTAMP | 4 | 1970-01-01 00:00:00, 结束时间是第2147483647秒。 格林尼治时间2038-01-19 03:14:07 | YYYYMMDD HHMMSS | 混合日期和时间值, 时间戳 |
字符串类型
类型 | 大小 | 用途 |
---|---|---|
CHAR | 0-255字节 | 定长字符串 |
VARCHAR | 0-65535 字节 | 变长字符串 |
TINYBLOB | 0-255字节 | 不超过 255 个字符的二进制字符串 |
TINYTEXT | 0-255字节 | 短文本字符串 |
BLOB | 0-65 535字节 | 二进制形式的长文本数据 |
TEXT | 0-65 535字节 | 长文本数据 |
MEDIUMBLOB | 0-16 777 215字节 | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0-16 777 215字节 | 中等长度文本数据 |
LONGBLOB | 0-4 294 967 295字节 | 二进制形式的极大文本数据 |
LONGTEXT | 0-4 294 967 295字节 | 极大文本数据 |
CHAR 和 VARCHAR 类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。