数据类型
数据类型是指列、存储过程参数、表达式和局部变量的数据特征,它决定了数据的存储格式,代表了不同的信息类型。
整型
| 数据类型 | 存储范围(有符号值) | 存储范围(无符号值) | 字节 | 用途 | 
|---|---|---|---|---|
| TINYINT | (-128,127)(-2^(7) 到 2^(7) - 1) | (0,255) (0 到 2^(8) - 1) | 1 | 小整数值 | 
| SMALLINT | (-32 768,32 767)(-2^(15) 到 2^(15) - 1) | (0,65 535) (0 到 2^(24) - 1) | 2 | 大整数值 | 
| MEDIUMINT | (-8 388 608,8 388 607)(-2^(23) 到 2^(23) - 1) | (0,16 777 215) (0 到 2^(16) - 1) | 3 | 大整数值 | 
| INT或INTEGER | (-2 147 483 648,2 147 483 647)(-2^(31) 到 2^(31) - 1) | (0,4 294 967 295) (0 到 2^(32) - 1) | 4 | 大整数值 | 
| BIGINT | (-9 233 372 036 854 775 808,9 223 372 036 854 775 807)(-2^(63) 到 2^(63) - 1) | (0,18 446 744 073 709 551 615) (0 到 2^(64) - 1) | 8 | 极大整数值 | 
浮点型
| 数据类型 | 存储范围(有符号值) | 存储范围(无符号值) | 字节 | 用途 | 
|---|---|---|---|---|
| FLOAT[(M,D)] | (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) | 0,(1.175 494 351 E-38,3.402 823 466 E+38) | 4 | 单精度浮点数值 | 
| DOUBLE[(M,D)] | (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 8 | 双精度浮点数值 | 
PS M 是数字总位数,D 是小数点后后面的位数,如果 M 和 D 被省略,根据硬件允许的限制来保存值
日期和时间类型
| 类型 | 字节 | 范围 | 格式 | 用途 | 
|---|---|---|---|---|
| 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/2037 年某时 | YYYYMMDD HHMMSS | 混合日期和时间值,时间戳 | 
字符串类型
| 类型 | 字节 | 用途 | 
|---|---|---|
| CHAR(n) | 0-255 | 定长字符串 | 
| VARCHAR(n) | 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 | 极大文本数据 | 
| ENUM(‘value1’, ‘value2’) | 1 或 2 个字节,取决于枚举类型的个数(最多 65 535 个值) | 枚举 | 
| SET(‘value1’, ‘value2’) | 1、2、3、4 或者 8 个字节,取决于 set 成员的数目(最多 64 个成员) | 集合 | 
PS CHAR 和 VARCHAR
- CHAR(n) 若存入字符数小于 n,则以空格补于其后,查询之时再将空格去掉。所以 CHAR 类型存储的字符串末尾不能有空格,VARCHAR 不限于此。
- CHAR(n) 固定长度,CHAR(4) 不管是存入几个字符,都将占用 4 个字节,VARCHAR 是存入的实际字符数 +1 个字节(n<=255)或 2 个字节 (n>255),所以 VARCHAR(4),存入3个字符将占用4个字节。
- CHAR 类型的字符串检索速度要比 VARCHAR 类型的快。
数据类型的属性
| 关键字 | 含义 | 
|---|---|
| NULL | 数据列可包含NULL值 | 
| NOT NULL | 数据列不允许包含NULL值 | 
| PRIMARY KEY | 主键约束,每张数据表只能存在一个主键,保证记录的唯一性,自动为 NOT NULL | 
| UNIQUE KEY | 唯一约束,每张数据表可以存在多个唯一约束,保证记录唯一性,可以为空值(NULL) | 
| AUTO_INCREMENT | 自动递增,适用于整数类型,默认情况下,起始值为1,每次增量为1,且必须与主键组合使用 | 
| DEFAULT | 默认值 | 
| UNSIGNED | 无符号 | 
| CHARACTER SET name | 指定一个字符集 |